[英]Are there other variables or objects in Java that like String objects will share a memory location or object reference if their value is equal?
我了解到以下变量将在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
这样就可以强制创建一个新的String对象。
我想知道的是,这是否会发生在Java中String对象之外的其他对象上?
是的,这适用于其他类型。 这是一个例子:
Integer a = 42;
Integer b = 42;
自动装箱产生的Integer
实例在-128到+127范围内,保证是同一对象。 见JLS 5.1.7也有类似的保证Boolean
, Byte
, Short
和Character
,以及。 尽管这是特定于平台的,但它也可以适用于上述范围的较大范围和Long
。
实际上,您真正要问的是类型T
示例,其中t1.equals(t2)
表示T
某些子集t1 == t2
...。 对于所有数组类型,以及不覆盖Object.equals
任何类类型,都是如此。 后者的示例包括所有enum
类型,即java.lang.Class
, java.lang.StringBuilder
和java.lang.Object
本身。
不,这仅适用于String对象。
String banana = "yummy";
是对字符串池“ yummy” int的引用。
String strawberry = new String("yummy");
在堆中创建新对象
字符串有方法intern()
返回字符串对象的规范表示。
这段代码显示为true:
String banana = "yummy";
String strawberry = new String("yummy");
System.out.println(banana == strawberry.intern());
无论如何,使用方法等于引用类型对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.