java构造函数_使用“”或构造函数创建Java字符串?

在Java中,字符串可以通过两种方式创建:

dd10a19a120a36b2474e593f1db5de7b.png

使用双引号和使用构造函数有什么区别?

1. 双引号vs构造函数

这个问题可以用两个简单的例子来回答。

列子1

56c4a9981ac7c3287bd14da52d9e7403.png

a==b为真,因为a和b在方法区域中引用相同的字符串文字。内存引用是相同的。

当多次创建相同的字符串文字时,只存储每个不同字符串值的一个副本。

这就是所谓的“字符串实习”。

在Java中,所有编译时常量字符串都会自动被挂起。

例子2

acdad3e3642cfadbc35b24fcf6c8f01f.png

c==d为false,因为c和d引用堆中的两个不同对象。不同的对象总是有不同的内存引用。

该图说明了上述两种情况:

0b7a3163d083fb4b7ddf2ef0524f216c.png

2. 运行时字符串实习

感谢LukasEder(他的评论如下):

String interning仍然可以在运行时完成,即使两个String是用构造函数构造的:

47e240481f89715903ae7892cac67c16.png

3.何时使用哪个

因为文字“abcd”已经是String类型,所以使用构造函数将创建一个额外的不必要的对象。

因此,如果只需要创建字符串,应该使用双引号。

如果确实需要在堆中创建一个新对象,应该使用构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值