神奇的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等一样的定义和初始化。。。
[解决办法]
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
true
另:==号比较的是左右两边的引用是否指向同一对象
Object的equals方法比较的是两对象内容是否一样。
[解决办法]
10楼的,Object的equals和==比较的都是内存地址。
String中重写了equals方法,比较的是字符串的字符序列是否相等(两对象的内容是否相等)。
[解决办法]
String str = “Hello”;
String str1 = new String(“Hello”);
str指向常量池的"Hello"
str1指向堆内存的一块内存,他指向了常量池的"Hello"
str = str + “ world!”;
str = new String((new StringBuffer(str)).append(“ world!”));
这个说实在话不敢确定,有两种结果:
1.String把StringBuffer变成常量
2.String指向了stringBuffer的地址...由于sb是字符数组,跟String是不一样的
[解决办法]
String str = “bcd”;不等价于String str = new String("bcd");
第一个是内存空间的引用并没有创建对象第二个创建了对象
[解决办法]
楼主你也知道只有在修改参数对象中的属性值的时候,对象才会被修改。
直接对变量整体赋值,只会让参数引用的(外部的)对象失去引用,不会导致内部属性被改变。
[解决办法]
肯定不等价。 这样的该程序的 性能要降低。 因为Sring str=new String("Hllow")多开了一个堆的内存。
[解决办法]
这个问题出现好多次了
[解决办法]
String str1 = “Hello”;
String str2 = new String(“Hello”);
那么str1.equals(str2)的结果为true. 但str1==str2的结果为false.
所以不等价!