新String有什么问题?

时间:2016-04-13 09:46:25

标签: java

由于我的写作,我没有给出任何理由的代码审查失败,因为s(类型为String)作为参数传递

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

说我应该使用s = "";代替。为什么呢?

4 个答案:

答案 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会以不同的方式处理它
  • s = new String(); //构造函数每次都会创建新对象 它被称为
  • s ="&#34 ;; //字符串文字将引用中的同一个对象 公共池

您可以在链接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");
    }       
}