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

}

相關問題