感觉了解一些,多谢各位朋友了。作者: ghhryr 时间: 2014-2-20 00:22
== 表示比较栈内存中的值是否相等,equals 表示的堆内存中的内容是否相等,所以我们编程过程中,首先看比较的两个数是否在同一个内存区域中,不是,肯定为false,是的话,具体分析作者: 戚兴海 时间: 2014-2-20 01:21
java中“==”和equals有时候的确不是很好区分。
1、“==”号是比较数据在内存中的存储地址,针对基本数据类型的话,一般都是用“==”来比较,例如:
int a =5,b=7;
if(a==b)
2、如果是对类进行比较,用“==”的情况下,如果比较双方是指向同一个对象(也就是在内存中是同一个地址),这时才为true,否则为false,例如:
Person P1 = new Person("张三",20);
Person P2 = new Person("李四",20);
Person P3 = P1;
这种比较结果就很明了了,P1==P2为false,P1==P3为true,其实不是在比较a和b或者a和c,而是比较他们这个引用所指向的对象是不是同一个(在内存中存储的地址是否相同)。
对String的比较和上面类似。
4、"=="和equals在字符串上的区别已经是老生长谈的问题了,说说他们之间的关系,equals方法源自Object这个类,在Object中equals的判断依据也是使用“==”去判断的,只是很多Object的子类都重写了equals方法,从而有了不一样的实现方式。如果一个类没有重写equals方法,那么调用equals的时候,还是去比较它们在内存中的存储位置是否相同。
例如上面的Person
Person P1 = new Person("张三",20);
Person P2 = new Person("张三",20);
在未重写equals方法时,P1.equals(P2)为false的,我们可以重写其equals方法,判断姓名年龄一样时就确定为同一个人,从而让结果为true。