我在考虑Java和内存管理,有一些我不确定的事情。
假设我们使用包装类Integer将int类型表示为对象
我们创建了两个对象
整数x = 1; 整数y = 1:
我的问题是,Java是在两个不同的内存位置创建两个相同的对象,并用x和y引用它们。或者它只创建一个对象并使用两个引用指向那个对象?
另外,有没有办法找出对象在Java中存储在内存中的位置?
答案 0 :(得分:4)
JVM implements cache用于小型Integer对象。并do not need获取java对象的地址。
答案 1 :(得分:2)
关于整数 - 它有自己的缓存,不会为范围-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);
}
答案 2 :(得分:1)
编译器通常会寻找类似的优化并应用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