2015-07-11 62 views
0

为什么这种说法是不好的做法:为什么字符串对象实例化是一个坏习惯?

String colour= new String("Blue"); 

,并与这一说法有什么

String colour="Blue"; 
+0

可能相关:[String object instantiation](http://stackoverflow.com/q/16742819)。 – jww

+3

*“为什么这种说法是不好的做法”* - 一个原因是它是毫无意义的。就像你的代码中关于你喜欢的颜色的注释一样。 –

+1

这是因为String的不变性。有关更多信息,请参阅本教程http://www.javahelps.com/2015/03/immutability-of-string.html – Gobinath

回答

0

首先是气馁,因为它读取来自String实习生池String差异,然后实例化一个新的对象实例。上String interning维基百科文章说(部分)

在计算机科学中,串实习是仅存储一个每个不同的字符串值,它必须是不可变的副本的方法。实习中的字符串使得一些字符串处理任务更具时间效率或空间利用效率,这是以创建或实施字符串时需要更多时间为代价的。不同的值存储在字符串实习生池中。

第二个示例从intern池中分配对String的引用。

+0

编译器是否不对其进行优化使其运行相同? – MrMadsen

+1

@MrMadsen号你会得到一个新的对象引用。 '“蓝色”!=新字符串(“蓝色”)' –

+2

确实,JLS >>确保<<它将成为新的对象引用......如果有任何可能,您可以观察到这一点。 (使用'!='进行测试是观察它的一种方法...) –

0

您正在创建一个不必要的String对象。

String colour= new String("Blue"); 

“蓝色”已经是字符串类型。

相关问题