java 对象字符串_JAVA字符串对象数

87)以下代码中将创建多少个对象?

String s1 = "string1";

String s2 = "string1";

String s3 = "string1";

答案是:只有一个对象

89)以下代码中将创建多少个对象?

String s = new String("Welcome");

答案是:两个对象,一个在字符串常量池中,另一个在非池(堆)中.

解决方法:

尽管String是一个用Java编写的类,但它是一种特殊的类,它与JVM有一些特殊的关系.其中一个是字符串文字(用引号括起来的字符序列).当JVM看到“abc”时,它会执行以下操作:

String obj = stringLiteralsCache.get("abc");

if (obj == null) {

obj = new String("abc");

stringLiteralsCache.put("abc", obj);

}

因此,在第一个示例中,第一行导致创建新实例,但接下来的两行只是从缓存中获取已创建的实例.

但缓存仅适用于文字.当您显式调用构造函数时,它无法阻止创建新实例.因此,新的String(“Welcome”)创建了2个对象:一个来自literal Welcome,因为它还没有在缓存中,第二个来自String构造函数的显式调用.

标签:java

来源: https://codeday.me/bug/20190722/1505866.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值