在Java中,字符串可以通过两种方式创建:
使用双引号和使用构造函数有什么区别?
1. 双引号vs构造函数
这个问题可以用两个简单的例子来回答。
列子1
a==b为真,因为a和b在方法区域中引用相同的字符串文字。内存引用是相同的。
当多次创建相同的字符串文字时,只存储每个不同字符串值的一个副本。
这就是所谓的“字符串实习”。
在Java中,所有编译时常量字符串都会自动被挂起。
例子2
c==d为false,因为c和d引用堆中的两个不同对象。不同的对象总是有不同的内存引用。
该图说明了上述两种情况:
2. 运行时字符串实习
感谢LukasEder(他的评论如下):
String interning仍然可以在运行时完成,即使两个String是用构造函数构造的:
3.何时使用哪个
因为文字“abcd”已经是String类型,所以使用构造函数将创建一个额外的不必要的对象。
因此,如果只需要创建字符串,应该使用双引号。
如果确实需要在堆中创建一个新对象,应该使用构造函数。