繁体   English   中英

如果值相等,Java中是否还有其他变量或对象(如String对象)共享内存位置或对象引用?

[英]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也有类似的保证BooleanByteShortCharacter ,以及。 尽管这是特定于平台的,但它也可以适用于上述范围的较大范围和Long

实际上,您真正要问的是类型T示例,其中t1.equals(t2)表示T某些子集t1 == t2 ...。 对于所有数组类型,以及不覆盖Object.equals任何类类型,都是如此。 后者的示例包括所有enum类型,即java.lang.Classjava.lang.StringBuilderjava.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());

参见String javadoc

无论如何,使用方法等于引用类型对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM