ArrayList динамически меняется? - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть Activity с ArrayList, а также я расширил 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 - это вызов по значению, поэтому я не могу фактически передать сегменты памяти, где я храню свой массив данных ... так что единственные значения должны drawview мог видеть те, которые я передал конструктору .... НО, когда я добавляю значения в ArrayList Деятельности, значения также являются аиралистом представления !!!! Может ли это происходить? Почему это происходит ... я очень растерялся ...

1 Ответ

2 голосов
/ 01 февраля 2011

В Java параметры действительно передаются по значению, но все не примитивы в Java являются ссылками. Поэтому, когда вы передаете ссылку, ссылка (адрес памяти) передается по значению, и чистый эффект состоит в том, что объект или массив, на который указывает ссылка, передается по значению.

Другими словами, ваш массив был эффективно передан по ссылке - это тот же массив.

Редактировать: из комментариев:

Переменная ar ссылается (указывает на) на массив. ar был передан конструктору DrawView. Переменная ar была передана по значению, поэтому значение ar (адрес памяти массива) было скопировано в параметр конструктора a. Так что теперь ar и a указывают на один и тот же массив, то есть фактически передают массив по ссылке.

...