日期:2014-05-20 浏览次数:20788 次
public class Test { public static void main(String[] args) { String str = "abc"; String str1 = "abc"; String str2 = new String("abc"); System.out.println(str == str1); System.out.println(str1 == "abc"); System.out.println(str2 == "abc"); System.out.println(str1 == str2); System.out.println(str1.equals(str2)); System.out.println(str1 == str2.intern()); System.out.println(str2 == str2.intern()); System.out.println(str1.hashCode() == str2.hashCode()); } }
------解决方案--------------------
不完全等价。
String str = “Hello”;
和
String str = new String(“Hello”);
得到的都是Hello值,equals,但不==
后面两个也是只equsla,不==
------解决方案--------------------
不等价
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println(s1 == s2);
System.out.println(s3 == s4);
结果:
true
false
可见s1和s2是用一对象,而s3和s4不是用一对象。
------解决方案--------------------
月经贴
http://so.csdn.net/search?q=string+equals+%3D%3D&sort=&rt=h&t=thread
------解决方案--------------------
又是谁开了个小号发月经贴的
------解决方案--------------------
String str = “Hello”; 和String str = new String(“Hello”);是等价的吗??
可能等,可能不等
在以上代码运行之前曾经有过一个字符串事"Hello",那么字符串池就不会再新建一个Hello
而后者,无论如何都必然会创建一个新的Hello字符串对象,不管你字符串池有没有
------解决方案--------------------
String str1 = “Hello”;
String str2 = new String(“Hello”);
不等
LZ可以直接用 == 判断两个引用是否为同一对象,如果两个引用变量引用了同一对象,这两个引用就相等,两个引用打印出来的对象的哈希码就一样
每天回帖即可获得10分可用分!
------解决方案--------------------
String str="hello" 与 String str= new String("hello");不是等价的。
String str = "hello"的执行过程:先在内存的常量池中查询是否存在“hello”,如存在,则让str指向对应的内存空间,如不存在,则在常量池中创建一个“hello”,并让str指向它。
String str = new String("hello");执行过程, 先在内存的常量池中查询是否存在“hello”,如存在,则将该块空间复制一份到内存的堆区间上,并将str指向该块区域,如不存在,则先在常量池中创建一个“hello”,然后将其复制到堆,再令str指向它。
参考代码:
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
应当输出:
true
true
false