我对此进行了搜索,但关键字必须过于通用以缩小相关位。为什么在android中声明字符串的两种方式都有效并且有什么区别?
答案 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 );
}