2013-10-28 21 views
-1

在java中,我們可以用一個參考變量引用一個對象。但是我們不能將它用於不使用靜態的基本數據類型,但它更加不同。對象之間的引用,但不是基元。爲什麼???

這裏,

Rectangle r1 = new Rectangle(0, 0, 100, 50); 
      System.out.println(r1); 

      Rectangle r2 = r1; 

      r2.grow(10, 20); 
      System.out.println(r1); 
      System.out.println(r2); 

同樣的事情在原始社會,

double n1 = 150; 
      double n2 = n1; 

      n2 = n2 * 20; 

      System.out.println(n1); 
      System.out.println(n2); 

但作用不同。我知道這是不同的,但我需要知道,爲什麼?內存中發生了什麼?

+4

雖然我真的已經很努力,我無法理解發生了什麼,你寫的。 –

+0

你的記憶被抹去了。哦,等一下? –

+0

我覺得他的說法,當你改變R2,R1的變化,但是當你改變N2,N1保持不變......但他應該寫輸出。確實如此。 – luanjot

回答

3

變量直接包含。在原語的情況下,值是原始的。在對象引用的情況下,該值是引用,而不是對象。

在圖片:

int a = 5; 

給我們

+-----+ 
| a | 
+-----+ 
| 5 | 
+-----+

Foo f = new Foo(); 

給我們

+-----+ 
| f | 
+-----+    +--------------+ 
| ref |-------------->| A Foo object | 
+-----+    +--------------+

由於f所保存的值是參考,因此它指向內存中其他位置。

無論您何時將一個變量分配給另一個變量(或將變量值傳遞給函數),您都會將該變量所保存的值複製到。因此,如果我們有af如上並做到這一點:

int b = a; 

現在我們有

+-----+ 
| a | 
+-----+ 
| 5 | 
+-----+ 

+-----+ 
| b | 
+-----+ 
| 5 | 
+-----+

價值a被複制到b

現在假設我們這樣做:

Foo f2 = f; 

記住什麼f持有是參考,而不是對象。因此,我們得到這個:

+-----+ 
| f | 
+-----+ 
| ref |-------+ 
+-----+  | 
       |  +--------------+ 
+-----+  +-------| A Foo object | 
| f2 |  |  +--------------+ 
+-----+  | 
| ref |-------+ 
+-----+

f被複制到f2,但該值的引用,這樣既ff2在內存中是指同一個對象的其他地方。

+0

對我來說很好的解釋。謝謝.. :) – CodeSac

1

這種情況是,對於原始的情況,你總是分配值,而對象則是對值的引用。

int a = 10; //Assign to variable a value of 10 
int b = a; //Assigne to variable b value that is under adress of a 

Object A = new Object(); // Create instance of class Object and assigne the reference to variable A; 
Object B = A; // Assign the reference to B of object under adress A; 

要詳細瞭解概念遵循this link

+0

謝謝你.. :) – CodeSac

1

(1)矩形R1 =新的Rectangle(0,0,100,50);

  • 創建矩形類的對象

(2)矩形R2 = R1;

  • 保持在R2中的對象引用

(3)r2.grow(10,20);

它改變可變然後,這種變化也顯示在R1

相關問題