2011-01-31 95 views
0

我有一個ArrayList活動,我也擴展了視圖,活動和視圖是在分離的類。ArrayList動態改變?

public class activity extends Activity{ 
private ArrayList<customObject> ar = new ArrayList<customObject>(); 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    drawview = new DrawView(this,ar); 
    setContentView(drawview);//more code 
}} 

正如你看到我傳遞給draview的構造我的活動,所以我可以處理的ArrayList has.i的對象的ArrayList了ArrayList中的相同名稱的兩個類。(如果該事項.. 。)

class DrawView extends View { 

    private ArrayList<customObject> ar; 

public DrawView(Context context,ArrayList<customObject> a) { 
     super(context); 
      this.ar=a; 
} 
//more code 
} 

而且現在非常非常非常奇怪的事情....據我瞭解Java是按值調用,所以我不能真正傳遞的內存段在哪裏存儲我的數組列表...所以drawview可以看到的唯一值就是我在構造函數上傳遞的值....但是當我在Activity的ArrayList中添加值時,值也是視圖的aaraylist! 這是怎麼回事?爲什麼會發生這種情況......我很困惑......

回答

2

在Java中,參數確實是按值傳遞的,但Java中的所有非基元都是引用。所以當你傳遞一個引用時,引用(內存地址)是通過值傳遞的,其淨效果是引用指向的對象或數組已經被值傳遞。

換句話說,您的數組已被有效地傳遞給引用 - 它是相同的數組。

編輯:從註釋:

可變ar引用(指向)的陣列。 ar已傳遞給DrawView構造函數。變量ar已按值傳遞,因此ar(該數組的內存地址)的值被複制到構造函數參數a中。所以現在ara指向相同的數組,即通過引用有效地傳遞數組。

+0

上面的代碼也適用於一個數組,所以我想這個和數組通過引用傳遞....對吧? – stelios 2011-02-01 00:08:17