2

我在考虑 Java 和内存管理,有些事情我不确定。

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

我们创建两个对象

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

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

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

4

3 回答 3

3

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

于 2013-11-05T11:33:53.887 回答
2

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

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

整数类

     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);
     }
于 2013-11-05T11:34:59.633 回答
0

编译器通常会寻找类似的优化并应用 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
于 2013-11-05T11:35:50.270 回答