Java中是否有其他变量或对象,如字符串对象,如果它们的值相等,它们将共享一个内存位置或对象引用?
我了解到,以下变量将共享JVM内存中的相同位置,因为它们的值相同:
String banana = "yummy";
String strawberry = "yummy"; // banana == strawberry is true here
除非您为其中一个用户提供如下“new”关键字:
String banana = "yummy";
String strawberry = new String("yummy"); // banana == strawberry is false
以便强制创建新的字符串对象
我想知道的是,除了Java中String类的对象之外,还有其他对象会发生这种情况吗
# 1 楼答案
是的,这适用于其他类型。下面是一个例子:
通过自动装箱生成的范围为-128到+127的
Integer
的实例保证是相同的对象;参见JLS 5.1.7Boolean
、Byte
、Short
和Character
也有类似的保证。它还可以应用于更大范围的上述内容,以及Long
,尽管这是特定于平台的事实上,您真正需要的是类型
T
的示例,其中t1.equals(t2)
表示t1 == t2
。。。对于T
的某些子集。这适用于所有数组类型,以及不重写Object.equals
的任何类类型。后者的示例包括所有enum
类型、java.lang.Class
、java.lang.StringBuilder
和java.lang.Object
本身# 2 楼答案
是字符串池中对“yummy”的引用
在堆中创建新对象
字符串具有方法intern()
此代码打印为true:
见String javadoc
无论如何,对引用类型对象使用方法等于
# 3 楼答案
否,这仅适用于字符串对象