黑马程序员技术交流社区
标题:
==与equals疑惑
[打印本页]
作者:
王_强
时间:
2013-3-25 07:58
标题:
==与equals疑惑
package com.strings;
public class StringTest1 {
/**
* @param args
*/
public static void main(String[] args) {
//字符串最大的特点:一旦被初始化就不可以被改变
String s1="abc";
String s2=new String("abc");
//s1和s2有什么区别
//s1 代表一个对象在内存中只要一个对象,s2在内存中有两个有两个对象
System.out.println(s1==s2);
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s1.equals(s2));
}
}
运行结果:
false
96354
96354
true
不是说,String比较时,==比较的是对象的引用值,而equal比较的是包含的内容,上面的结果有点疑惑?
第一个应该是true才对。
作者:
胡志超
时间:
2013-3-25 08:13
==比较的是地址值,由于String类重写了equals()方法,其equals()方法是根据哈希值来比较的
作者:
李尧
时间:
2013-3-25 08:21
1. 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
2. 如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
3. 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。
==比较的是内存空间.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2