Java中“==”和equals方法
2016-03-27 16:51
381 查看
Java程序中测试两个变量是否相等有两个方法,一种是==运算符,另一种是equals方法。
==:
当时用“==”判断两个变量是否相等时,如果两个变量是基本类型的变量,且都是数值类型,如果两个变量的值相等,则返回true;
但对于两个引用变量来说,它们必须指向同一个对象时,==才会返回true。==不能用于比较两个类型上没有父子关系的对象。
eg:
65 == 65.0f ? true
65 == A ? true
str1 == str2 ? false
str1 equals str2 ? true
可以看到,用“==”判断时,65,65f和‘A’相等。
str1和str2都是引用类型变量,它们分别通过new关键字创建了String对象,因此str1和str2两个变量不相等。
对于String来说,"hello"直接量和new String("hello")有什么区别呢?
“hello”,JVM将会使用常量池保存这些字符串;
new String("hello"),JVM会用常量池保存“hello”直接量,然后调用String类的构造器构造一个String对象,新创建的对象保存在堆内存中。
==:
当时用“==”判断两个变量是否相等时,如果两个变量是基本类型的变量,且都是数值类型,如果两个变量的值相等,则返回true;
但对于两个引用变量来说,它们必须指向同一个对象时,==才会返回true。==不能用于比较两个类型上没有父子关系的对象。
eg:
public class EqualTest { public static void main(String[] args){ int it = 65; float fl = 65.0f; System.out.println("65 == 65.0f ? " + (it == fl)); char ch = 'A'; System.out.println(" 65 == A ? " + (it == ch)); String str1 = new String("hello"); String str2 = new String("hello"); System.out.println("str1 == str2 ? " + (str1 == str2)); System.out.println("str1 equals str2 ?" + (str1.equals(str2))); } }输出:
65 == 65.0f ? true
65 == A ? true
str1 == str2 ? false
str1 equals str2 ? true
可以看到,用“==”判断时,65,65f和‘A’相等。
str1和str2都是引用类型变量,它们分别通过new关键字创建了String对象,因此str1和str2两个变量不相等。
对于String来说,"hello"直接量和new String("hello")有什么区别呢?
“hello”,JVM将会使用常量池保存这些字符串;
new String("hello"),JVM会用常量池保存“hello”直接量,然后调用String类的构造器构造一个String对象,新创建的对象保存在堆内存中。
相关文章推荐
- Java重写equals
- java中this关键字和static关键字和super关键字的用法
- Java语言中几个常用的包
- JVMGC——基本垃圾回收算法
- JDK8内存模型—消失的PermGen
- 交换两个变量值的三种方法(Java实现)
- Java基础之Map总篇
- java事务学习笔记(八)--分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- springMVC三种异常处理方式
- Myeclipse9.1 破解失败解决方法
- Java学习笔记-Struts2工作机制
- svn1.8 server client eclipse 插件 配置 完全教程
- 图形程序设计(Java核心技术卷Ⅰ)
- eclipse添加JSF XHTML模板
- Servlet笔记--利用反射实现多个请求使用同一个Servlet
- Spring容器中bean的生命周期以及关注spring bean对象的后置处理器:BeanPostProcessor(一个接口)
- JMM——运行时数据区
- Java的接口
- struts2中的constant配置详解
- 浅析Java中的final关键字