1

当我们像下面电话: -当使用new操作符调用堆中的Class()时发生多个调用时会发生什么?

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中的noob。

请详细说明使用new呼叫的堆段/动态内存分配给Class对象。

+0

你的类被称为'A'时间,但你创建'新Class'? – Bubletan

+0

你的代码不太可能编译,因为你有大写'Class',实际的类名是'A',而不是'Class'。你能否使用编译器检查你的代码,然后编辑提交工作代码的问题? –

+0

@ TagirValeev-对不起,编辑了一下。那个错误!但是,我希望大家清楚大家的想法! – asad

回答

0

当您使用new运算符创建两个对象时,它们将作为堆中的不同对象来查找。所以,如果你与==比较,他们不会太多。但是,如果你的代码是JIT编译的,不会因为JIT编译器是足够聪明,内联构造函数和display()方法,并得出结论:可以只改写为

System.out.println(5); 
System.out.println(7); 

发生堆分配在所有,但如果你真的将它们与==进行比较,然后可能会关闭此优化,并在堆上分配两个不同的对象。

0

这将是堆两个DISTICT对象,每次你使用new运算符

public class Test { 
int x; 
public Test(int a){ 
x = a; 
} 
public void display(){ 
System.out.println(x); 
} 
public static void main(String args[]){ 
    Test firstInstance = new Test(5); 
    Test secondInstance = new Test(5); 
    if(firstInstance == secondInstance) 
     System.out.println("same"); 
    else 
    { 
     System.out.println("firstInstance"+firstInstance); 
     System.out.println("secondInstance"+secondInstance); 
    } 
} 

}

相关问题