关于String

String在Java里是比较特殊的类型,因为它有一种用得最普遍的特殊的实例化方法:String s = "some string";

 

这种初始化方法和 String s = new String("some string") 并不是等效的,后者不但效率低,而且会重复创建对象。

 

对于String来说,最好最直接的方法是用字符串直接量构造,不但是因为语法上方便,还有一点很重要的是:对于相同的字符串直接量,系统给我们返回的是同一个String对象。相当于系统提供了缓存来维护String类的每个对象,合理使用可以使我们少创建重复的对象。

 

结果是:true

 

并且对于Integer、Long、String这样的不可变类,直接量构造都要比用“new”构造好得多,这些类的构造函数其实都是对象复制的过程,与其说“new”,还不如说“clone“。

 

ps:

记得经常有个面试题这么问:

String s = new String("xxxxxx") 创建了几个对象?

答案是2个,一个是系统读到"xxxxxx"的字符串直接量时在缓存里创建的对象,一个是new String()返回的clone对象。

 

其实可以扩散下:

String s = "xxxxxx";

String s2 = "xxxxxx"; 创建了几个对象?

答案是一个

 

还有:

String s = new String("xxxxxx")

String s1 = new String("xxxxxx") 创建了几个对象?

别说是4个,而是3个~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值