2016-04-13 63 views
0

我只是一个失败的代码审查,由于没有给我任何书面理由,对于s(String类型)作为参数新字符串有什么问题?

if (s == null){ 
    s = new String(); 
} 

说我应该用s = "";而不是传递的功能。为什么?

+0

https://stackoverflow.com/questions/2486191/what-is-the-java-string-pool-and-how-is-s-different-from-new-strings –

+0

你的问题不清楚。's = new String();'不能编译。你想要做什么? – TheLostMind

+0

U wot?它在Java 7中有效。 –

回答

7

您可以随时向审阅者澄清?

new String();总是创建一个新的字符串。 (是不是Java语法自解释?)

s = "";将设置参考实验字符串,因此是首选。

4

当超过与new关键字初始化文本进行初始化有一个在String类的偏爱,这是因为JVM优化,而且由于JVM与分配直接在StringPool文字初始化字符串。

+0

但是如果'“”在字符串池中不可用? –

+0

JVM将在那里分配一个新的空字符串... –

1

JVM处理不同的看法,如果你拨打:

  • S =新的String(); //构造函数每次创建新对象 它叫做
  • s =“”; //字符串字面将指向同一个对象在 公共池

你可以找到链接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"); 
    }  
} 
3

两个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是虚假的

+4

第一个示例中的“a == b”将如何返回true? –

+2

您在示例中似乎犯了一个错误:第一个示例中的“a == b”将不会返回true,因为“banana”将不会等于“orange”。如果两者都是“香蕉”,那么他们会是平等的。 – JonasCz

+0

是的,感谢提高它.. – annu

相关问题