String s1 = "hello"; String s2 = s1; String s3 = "he"; s3 += "llo"; System.out.println(s1 == s2); //为什么不想等? System.out.println(s1 == s3); System.out.println(s1.equals(s3));
让我想起Python中的"一切皆对象";
想到了C++中的操作符重载;
你的情况上面的帖子讨论了很多,看了应该很有帮助;
== 是引用的比较;
equal 是数值的比较;
a = "1";
b = "1";
a 和 b 同时引用的 "1" ,所以 == 返回true;
[quote]s3 += "llo"; [/quote]
应该可以理解为:
tmp = new String();
tmp = s3+"llo"; // tmp = "he" + "llo";
s3 = tmp;
return s3;
此时S3引用了JVM创建的新的String对象, 可根据HashCode,显示是不同对象的;
所以S1.equals(S3) 但 == 并不返回 true
http://wdmcln.iteye.com/blog/136268 这篇文章也不错;
[url]http://www.iteye.com/topic/256283?page=4[/url]
有个地方说错,不好意思.这个HashCode应该也一样的.是对内容的一个HashCode不是对象的引用标示; :)