当我们拨打如下电话时:
class Class{
int x;
public Class(int a){
x = a;
}
public void display(){
System.out.println(x);
}
}
在main方法中,然后我们使用类的对象显示数据:
new Class(5).display(); // object 1
new Class(7).display(); // object 2
现在,我的问题是:
我从对象1和对象2代表的是相等的还是
不同(就堆中的内存位置而言)?是否两个分开
内存位置将在堆(动态内存分配器)中创建,或者
是否将使用相同的对象(堆中的内存位置)?
很久以来我一直感到困惑。而且我只是Java的菜鸟。
请详细说明使用
new
调用将堆节/动态内存分配给Class对象。 最佳答案
当您使用new
运算符创建两个对象时,它们将在堆中将您视为不同的对象。因此,如果将其与==
进行比较,它们将不会太多。但是,如果您的代码是JIT编译的,则根本不会发生堆分配,因为JIT编译器足够聪明,可以内联构造函数和display()
方法,并得出结论,可以将其重写为
System.out.println(5);
System.out.println(7);
但是,如果您将它们与
==
进行实际比较,则可能会关闭此优化功能,并在堆上分配两个不同的对象。