日期:2014-05-20  浏览次数:20788 次

神奇的Stirng类!
String类是个特殊的类,对它的一些操作符是重载的,如:

String str = “Hello”; 等价于String str = new String(“Hello”);

String str = “Hello”;

str = str + “ world!”;等价于str = new String((new StringBuffer(str)).append(“ world!”));


这四句话有问题吗?
String str = “Hello”; 和String str = new String(“Hello”);是等价的吗??
请详解!!谢谢

------解决方案--------------------
str = str + “ world!”;等价于str = new String((new StringBuffer(str)).append(“ world!”));
肯定不等价
------解决方案--------------------
没问题。
String str = “Hello”; 和String str = new String(“Hello”);是等价的吗??
是等价的。
String和StringBuffer都是类,但是因为经常被使用到。
所以做了些修改,运行这样使用String str = “Hello”;
就像基本数据类型,比如int等一样的定义和初始化。。。
------解决方案--------------------
Java code

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