测试代码如下:
public class TestString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1="ab";
String str2="a"+"b";
//比较一
System.out.println(str1==str2);//结果true
//比较二
System.out.println(new String("ab")==new String("ab"));//结果false;
// 且发现"ab".hashcode,new String("ab").hashcode都相等
System.out.println(str1.hashCode());//结果3015
System.out.println(str2.hashCode());//结果3015
System.out.println(new String("ab").hashCode());//结果3015
}
}
疑问:
如果==比较的是内存地址,很明显str1和str2的内存地址不一样
如果==比较的是内容,很明显比较二中的内容一致,
如果==比较的是hashcode,以上的hashcode都相等。
==到底判断的是什么?
public class TestString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1="ab";
String str2="a"+"b";
//比较一
System.out.println(str1==str2);//结果true
//比较二
System.out.println(new String("ab")==new String("ab"));//结果false;
// 且发现"ab".hashcode,new String("ab").hashcode都相等
System.out.println(str1.hashCode());//结果3015
System.out.println(str2.hashCode());//结果3015
System.out.println(new String("ab").hashCode());//结果3015
}
}
疑问:
如果==比较的是内存地址,很明显str1和str2的内存地址不一样
如果==比较的是内容,很明显比较二中的内容一致,
如果==比较的是hashcode,以上的hashcode都相等。
==到底判断的是什么?