当我们拨打如下电话时:

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);


但是,如果您将它们与==进行实际比较,则可能会关闭此优化功能,并在堆上分配两个不同的对象。

09-28 01:56
查看更多