static void fun4(){
String str1 = "abc";String str2 = new String("abc");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
if(str1 == str2) System.out.println("相同");
else System.out.println("不相同");
}它的运行结果居然是:
96354
96354
不相同小生不懂了,求哪位前辈指教!
解决方案 »
- java 初学者问问
- 三行代码错在哪?我都照书打的,那绿的是啥意思
- 『求助』 依次添加两个带图片的JLabel,怎么让第二个覆盖掉第一个?
- 经典程序,能查看你启动了多少个线程,但不是很明白细节。
- 有关Runtime.getRuntime().exec()的问题
- 用java怎么求解质数?
- 看了http://free5.ys168.com/?1shome这个网站右边的目录列表
- java中如何实现循环队列?需要自己写还是有现成的容器类可以用?
- 使用java发手机短信,我下载了一个smsjdk2.1但是不知道怎么用。
- JBuilder高手请进!!!
- hashMap的反序列化问题
- 【求助】安装了Java SE后如何配置Tomcat?
用:
if(str1.equals(str2))
错,hashCode()是针对内容的,可以翻译为“摘要”。跟地址完全没啥关系。
不过我的老师说:“hashCode()是对象地址经过某种运算而得到的唯一值”。
所以我需要查查资料,证实一下。
但是String重写了hashcode,你就要去看String的hashcode 是怎么来的。
可以自己尝试读源代码。
好多对象都用相同的hashcode,但是不同的对象,内存地址一定不一样
你程序中初始化字符串的两种方法,所得的变量都是成员变量,它们所在得地址都在堆中,都分配内存地址,而“==”比较的是两个字符串的地址,而不是内容。地址当然不同,所以输出不相同。如果你改成equal,肯定输出相同。