Java中字符串常量池的特殊情况

3

我有以下两行Java代码:

String str = new String("My place")
String str1 = new String("My place")

很明显,使用 new String("My place") 会创建两个对象,一个是因为字符串池(interning)而产生的,另一个是使用 new 关键字创建的。但是我有些困惑,因为这里的参数具有相同的文字,所以不确定 str1 是否使用了相同的字符串池对象,导致结果有三个对象,还是不同的对象,导致结果有四个对象。

3
3个物体......因为字面意思相同。 - dev8080
2个回答

3

Java中字符串字面量的内部化是自动完成的,因此相同的内部化对象将在两个构造函数中使用,所以会有三个对象而不是四个。


-2

相同的 interned 对象将被 str1 使用,因此会产生 3 个对象,尝试使用 equals 方法理解。


str1与内部化无关,equals()方法与问题有什么关系? - user207421
假设类String有一个字段,私有char[] data。那么在执行String str = new String("xyz");之后,以下内容将成立:str.equals("xyz")、str != "xyz"、str.data == "xyz".data。也就是说,两个字段都指向同一个数组。我的观点是使用equals()和==方法来理解字符串池和堆中的对象创建。 - Anurag Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接