return(string expr)和返回New String(string expr)之间有什么区别?

时间:2013-12-08 09:24:24

标签: java string class object types

这两种方法有区别吗?

public String toString() {
    return this.from.toString() + this.to.toString();
}

public String toString() {
    return new String(this.from.toString() + this.to.toString());
}

(当然,假设from.toString()to.toString()方法正在返回字符串)。

基本上我对Java中的字符串处理感到困惑,因为有时字符串被视为基本类型,即使它们是类实例。

4 个答案:

答案 0 :(得分:5)

There is no difference in real.

因为你的两个函数都有返回类型String,所以创建一个新的String()只是一个开销。它就像将字符串再次包装到一个字符串中并在池中创建一个新的字符串,实际上没有任何优势。

但是原始类型和String对象的一个​​主要区别是类String总是创建新的字符串。

String str = "my string";

如果字符串池中已存在“my string”。那么它将使用相同的字符串而不是创建新的。

这就是为何,

String str1= "my string";
String str2 ="my string";

str1==str2? --> will return true

上面的结果是正确的,因为使用了来自池的相同String对象。

但是当你这样做时,

String str = new String("new string");

始终,创建一个新的String对象,而不管池中是否存在相同的对象。

所以比较:

String str1 = new String("new string");
String str2 = new String("new string");

str1==str2 --> will return false

答案 1 :(得分:3)

如果在某些时候您之前定义了String“ABC”,则会有所不同。 Java实习字符串,因此当您没有明确声明您需要new对象时,它将返回具有相同值的对象。例如。

String abc = "abc";

// Some code.

return new String("abc"); // This will be a new object.

然而,如果你这样做:

String abc = "abc";

// Some code.

return "abc"; // This will be the above object.

这是因为JVM浪费了具有相同值的对象的内存是没有意义的,因此它将它们存储在内存中并等待您再次需要/使用它们!

你选择哪一个?

String实习过程往往不会妨碍你太多,所以你通常可以选择前者。

答案 2 :(得分:2)

第二个有一个额外的开销..在第二个方法中,你正在初始化字符串一次,第一个...像

String s = "something";

return s; 

VS

return new(s);

除此之外,两者都将完成相同的任务。

答案 3 :(得分:1)

return new String(this.from.toString() + this.to.toString());

上述语句将创建2个对象。

第一个对象是指this.from.toString() + this.to.toString()的连接值。这没有参考。 由于new运算符而创建了第二个对象。

return this.from.toString() + this.to.toString();

这将在堆内存区域创建1个对象。