繁体   English   中英

Java对象创建和引用

[英]Java object creation and referencing

我在考虑Java和内存管理,有一些我不确定的东西。

假设我们使用包装类Integer将int类型表示为对象

我们创建两个对象

整数x = 1; 整数y = 1:

我的问题是,Java是否在两个不同的内存位置创建两个相同的对象,并使用x和y引用它们。 或者它只创建一个对象并使用两个引用指向那个对象?

另外,有没有办法找出对象在Java中存储在内存中的位置?

JVM为小型Integer对象实现缓存 并且您不需要获取Java对象的地址。

关于整数-它具有自己的缓存,不会为-128..127范围创建任何新实例。

因此,在您的情况下,它将引用相同的对象。

Integer.class

     public static Integer valueOf(int i) {
         final int offset = 128;
         if (i >= -128 && i <= 127) { // must cache
             return IntegerCache.cache[i + offset];
         }
         return new Integer(i);
     }

编译器通常会寻找这样的优化并应用Copy on Write http://en.wikipedia.org/wiki/Copy-on-write

您可以检查字符串,因为定义了两个字符串,例如

String x = "test";
String y = "test":

是这样的

if (x == y) 

其他任何时间都需要.equals

例如

public class test
{
  public static void main(String[] args){
    String x = "test";
    String y = "test";
    if (x == y){
      System.out.print("Same object");
    }
  }
}

然后跑

$ java test 
Same object

暂无
暂无

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

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