String str = new String("abc")
这样得方式创建了两个对象,一个是abc,一个是str,一般不建议这样创建
直接String str ="abc";就可以
另外楼主说错了,第一种方式创建的,也就是用new创建的,不会去字符串池中找看是否有相同的,
new创建的会在堆中重新开辟内存。
也就是说String str = new String("abc")
String str2 = new String("abc")
这样创建的str 和 str2 其实是两个对象
但是
String str ="abc"
String str2 ="abc"
这样创建的str == str2
当你创建str2得时候会在字符串池中找是否有"abc"存在,若存在则不会创建了,直接把str2这个引用指过去
不带参数是正常相当于调用了这个构造方法:
public String () {
value = new char[0];
offset = 0;
count = 0;
}
只创建了String对象
带参数相当于调用了这个构造方法:
public String (String string) {
value = string.value;
offset = string.offset;
count = string.count;
}
也就是有两个String对象
这样得方式创建了两个对象,一个是abc,一个是str,一般不建议这样创建
直接String str ="abc";就可以
另外楼主说错了,第一种方式创建的,也就是用new创建的,不会去字符串池中找看是否有相同的,
new创建的会在堆中重新开辟内存。
也就是说String str = new String("abc")
String str2 = new String("abc")
这样创建的str 和 str2 其实是两个对象
但是
String str ="abc"
String str2 ="abc"
这样创建的str == str2
当你创建str2得时候会在字符串池中找是否有"abc"存在,若存在则不会创建了,直接把str2这个引用指过去
不带参数是正常相当于调用了这个构造方法:
public String () {
value = new char[0];
offset = 0;
count = 0;
}
只创建了String对象
带参数相当于调用了这个构造方法:
public String (String string) {
value = string.value;
offset = string.offset;
count = string.count;
}
也就是有两个String对象