String一个奇怪的地方

      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不是对象的引用标示; :)