String foo =“bar”与String foo = Android中的新字符串(“bar”)?

时间:2012-01-04 15:50:12

标签: java variables

我对此进行了搜索,但关键字必须过于通用以缩小相关位。为什么在android中声明字符串的两种方式都有效并且有什么区别?

4 个答案:

答案 0 :(得分:4)

使用new关键字创建一个新的字符串对象,其中优化使用foo = "bar",指向在应用中不同位置使用的相同字符串对象。

对于instacne:

String foo = "bar";
String foo2 = "bar";

编译器会将上述代码优化为完全相同的对象[foo == foo2,与foo.equals(foo2)]相悖。

编辑:经过一番搜索,@ Sulthan是对的。它不是编译器依赖的问题,它位于specs

  

字符串文字始终引用类的相同实例(第4.3.1节)   字符串。

答案 1 :(得分:3)

这是java语法,不仅仅针对Android。这是对此的讨论。 String vs new String()

答案 2 :(得分:0)

这不仅仅是关于Android,而是关于Java。

当你写"xxxx"时,它是一个文字字符串。这是一个String实例。请注意,具有相同值的所有文字字符串都是相同的实例。有关详细信息,请参阅方法String.intern()

示例:


String s1 = "abc";
String s2 = "abc";

在此示例中,s1 == s2为真。

new String("xxx")是一个复制构造函数。你拿一个字符串(文字),然后从中创建一个新的实例。由于所有字符串都是不可变的,这通常是您不想做的事情。

示例:


String s1 = "abc";
String s2 = new String("abc");

s1.equals(s2)是真的 s1 == s2是假的

答案 3 :(得分:0)

String x = new String( "x" )

有效地创建2个字符串。一个用于文字(这是一个没有变量名的表达式),另一个用于保存为x。它与:

相同
String x;
{
  String a = "x";
  x = new String( a );
}