我了解到以下变量将在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类的对象之外,是否还有其他对象会发生这种情况?
发布于 2016-05-27 21:15:27
是的,还有其他类型的应用程序。下面是一个例子:
Integer a = 42;
Integer b = 42;自动装箱产生的-128到+127范围内的Integer实例保证是同一个对象;参见JLS 5.1.7,Boolean、Byte、Short和Character也有类似的保证。它还可以应用于上述更大的范围,并适用于Long,尽管这是特定于平台的。
实际上,您真正询问的是T类型的示例,其中t1.equals(t2)表示t1 == t2……用于T的某些子集。对于所有数组类型和未覆盖Object.equals的任何类类型都是如此。后者的示例包括所有enum类型、java.lang.Class、java.lang.StringBuilder和java.lang.Object本身。
发布于 2016-05-27 20:57:49
不适用,只适用于String对象。
发布于 2016-05-27 21:09:29
String banana = "yummy"; 是对字符串池中的"yummy“的引用。
String strawberry = new String("yummy");在堆中创建新对象
字符串具有方法intern()
返回string对象的规范表示。
下面的代码输出为true:
String banana = "yummy";
String strawberry = new String("yummy");
System.out.println(banana == strawberry.intern());无论如何,对于引用类型的对象,使用method equals。
https://stackoverflow.com/questions/37483788
复制相似问题