2014-06-05 51 views
0

如果我有兩個類A和B如下:Java語言和 「新」 字

A級

class A{ 
    int i; 
    A(int j){ 
     i=j; 
    } 
} 

B類

class B{ 
    A a; 
    B(A a){ 
     this.a=a; 
    } 
} 

然後如果我有一個程序有以下聲明:

A a = new A(5); 
B b = new B(a); 

我的問題是:

上午我將有兩個不同的對象ab.a,這將有i相同的值,或者是我的b.a對象只是指向的對象a,如果我更改值a.i,那麼價值b.a.i也會改變嗎?

+0

謝謝大家,你回答是非常非常有幫助的! – user3710255

+0

...那麼如果你接受其中之一作爲答案 –

回答

0

當你

B b = new B(a); 

this.a = a; 

將複製A實例的參考。換句話說,ab.a都指向到內存中的相同位置,其中存儲A實例。

他們是訪問同一個對象的不同方式。因此,如果通過其中一個變量更改一個對象,則同一對象將受到影響。

1

將有一個A對象和兩個指針aa.b到該對象。您可以使用這兩個引用ab.a來更改該對象的狀態。

1

Java是通過價值!

在這種情況下,指向Object的引用的值將被傳遞。所以,你有兩個引用指向對象A的同一個實例

0

相同的對象和兩個指針指向同一個對象的Java是傳值

System.out.println(a.i+"--------"+a.hashCode()); 
    System.out.println(b.a.i+"------"+b.a.hashCode()); 

這上面兩行打印相同的值。因爲對象是一樣的。

0

將會有一個A的實例,它包含一個整數。

而且會有它接收參考(指針)A.

B的一個實例

所以訪問白將改變在

原語是由複製A.實例的整數值。對於類,通過值複製指向對象的指針。

0

因爲Java的引用是按值傳遞,目標指向一個b.a是完全相同的一個,這意味着改變一個「價值」同時改變。所以如果你把一個杯子叫做杯子,而且我把它稱爲一個容器,如果我在杯子裏放了一些水,那麼水就在你稱之爲「杯子」的同一個器皿中,我稱之爲「容器」。希望這個例子有幫助。