java注解less_Java中有多less个string对象?

其他一些答案是有道理的,但是string呢?

String s = "HI";

对于string文字,当一个.java文件被编译成一个.class文件时,任何string都以特殊的方式logging下来,就像所有的常量一样。 当一个类被加载时(注意加载发生在初始化之前),JVM通过类的代码并查找string文字。

当它find一个时,它会检查是否已经从堆中引用了等价的string。 如果不是,则在堆上创build一个String实例,并将该对象的引用存储在常量表中

一旦对该string对象进行了引用,则在整个程序中对该string文本的任何引用都将简单地replace为对string文字池引用的对象的引用。

因此,应该有四个Java对象,尽pipe当同一个方法被一次又一次地调用,那么只有三个对象,如应用程序中string文字池包含文字“HI”。

另外,关于为什么在执行上述方法块时创build新对象的更多信息,我们还可以检查不同string的哈希码( String是不可变的)。

public static void main(String[] args) { NumberOfString str = new NumberOfString(); String s = str.makeStrings(); System.out.println(s.hashCode()); } public String makeStrings() { String s = "HI"; System.out.println(s.hashCode()); s = s + "5"; System.out.println(s.hashCode()); s = s.substring(0, 1); System.out.println(s.hashCode()); s = s.toLowerCase(); System.out.println(s.hashCode()); return s.toString(); }

你得到以下输出:

2305 71508 72 104 104

我们不应该在上面的例子中的string字面值对吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值