由于我的写作,我没有给出任何理由的代码审查失败,因为s
(类型为String)作为参数传递
if (s == null){
s = new String();
}
说我应该使用s = "";
代替。为什么呢?
答案 0 :(得分:7)
您可以随时向评论员澄清吗?
new String();
始终创建一个新字符串。 (Java语法不是自我解释的吗?)
s = ""
;将设置对 interned 字符串的引用,因此是首选。
答案 1 :(得分:4)
使用String
关键字进行初始化时,new
类中的首选项使用文字进行初始化,这是因为 JVM 优化,并且因为 JVM 直接在StringPool
。
答案 2 :(得分:3)
两个s = new String();s = "";
表达式都给出了一个字符串对象,但两者之间有明显的区别。 s=new String()
将在堆内存中创建一个新对象,而如果我们使用字符串文字s = "";
创建对象,它可能会从String池返回一个现有对象(一个字符串对象的缓存)如果它已经存在。
示例将使其更清晰:
String a= "banana";
String b= "banana";
这里a和b都引用同一个对象,因此a==b
为真
String a =new String("banana")
String b= new String("banana")
这里a和b都引用了两个不同的对象,因此a==b
是假的
答案 3 :(得分:1)
如果您致电:
,JVM会以不同的方式处理它您可以在链接bebow中找到完整的答案: http://o7planning.org/web/fe/default/en/document/19529/string-stringbuffer-and-stringbuilder-tutorial
示例:
public static void main(String[] args) {
String str1 = "apple";
String str2 = "apple";
if(str1 == str2) {
System.out.println("str1, str2: same object");
} else {
System.out.println("str1, str2: different object");
}
String str3 = new String("apple");
String str4 = new String("apple");
if(str3 == str4) {
System.out.println("str3, str4: same object");
} else {
System.out.println("str3, str4: different object");
}
}