ArrayList动态变化?

时间:2011-01-31 23:57:05

标签: android dynamic arraylist

我有一个带有ArrayList的Activity,而且我已经将View,Activity和View扩展为分离的类。

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,所以我可以处理ArrayList的对象has.i在两个类中给出了相同的ArrayList名称。(如果这很重要......)

class DrawView extends View {

  private ArrayList<customObject> ar;

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

现在是一个非常非常奇怪的事情....据我所知java是按值调用,所以我实际上无法传递存储我的arraylist的内存段...所以唯一的值应该是drawview可以看到我在构造函数上传递的那些....但是当我在Activity的ArrayList中添加值时,值也是视图的aaraylist! 这会发生吗?为什么会发生这种情况......我非常困惑......

1 个答案:

答案 0 :(得分:2)

在Java中,参数确实是按值传递的,但Java中的所有非基元都是引用。因此,当您传递引用时,引用(内存地址)将按值传递,并且净效果是引用所指向的对象或数组已按值传递。

换句话说,你的数组实际上是通过引用调用传递的 - 它是相同的数组。

来自评论的

编辑

变量ar引用(指向)数组。 ar已传递给DrawView构造函数。变量ar是按值传递的,因此ar(数组的内存地址)的值被复制到构造函数参数a中。所以现在ara指向同一个数组,即通过引用有效地传递数组。