我只是一个失败的代码审查,由于没有给我任何书面理由,对于s
(String类型)作为参数新字符串有什么问题?
if (s == null){
s = new String();
}
说我应该用s = "";
而不是传递的功能。为什么?
我只是一个失败的代码审查,由于没有给我任何书面理由,对于s
(String类型)作为参数新字符串有什么问题?
if (s == null){
s = new String();
}
说我应该用s = "";
而不是传递的功能。为什么?
您可以随时向审阅者澄清?
new String();
总是创建一个新的字符串。 (是不是Java语法自解释?)
s = ""
;将设置参考实验字符串,因此是首选。
当超过与new
关键字初始化文本进行初始化有一个在String
类的偏爱,这是因为JVM优化,而且由于JVM与分配直接在StringPool
文字初始化字符串。
但是如果'“”在字符串池中不可用? –
JVM将在那里分配一个新的空字符串... –
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");
}
}
两个s = new String();s = "";
表达式给出了一个字符串对象,但两者之间有明显的区别。 s=new String()
将在堆内存中创建一个新对象,而如果我们使用字符串文字创建对象s = "";
它可能会返回字符串池中的现有对象(字符串对象缓存)(如果它已存在)。
实施例将使其更加清晰:
String a= "banana";
String b= "banana";
这里a和b是指相同的对象,因此a==b
为真
String a =new String("banana")
String b= new String("banana")
这里a和b是指两个不同的对象因此a==b
是虚假的
https://stackoverflow.com/questions/2486191/what-is-the-java-string-pool-and-how-is-s-different-from-new-strings –
你的问题不清楚。's = new String();'不能编译。你想要做什么? – TheLostMind
U wot?它在Java 7中有效。 –