Java массив примитивных типов данных - PullRequest
4 голосов
/ 29 мая 2011

Почему следующий код работает так, как будто он использует ссылочные типы, а не примитивные типы?

int[] a = new int[5];
int[] b = a;
a[0] = 1;
b[0] = 2;
a[1] = 1;
b[1] = 3;
System.out.println(a[0]);
System.out.println(b[0]);
System.out.println(a[1]);
System.out.println(b[1]);

И вывод: 2 2 3 3 скорее, чем 1 2 1 3

Ответы [ 4 ]

6 голосов
/ 29 мая 2011

Содержимое массива int может быть не ссылками, но переменные int [] равны .Установив b = a, вы копируете ссылку, и два массива указывают на один и тот же кусок памяти.

2 голосов
/ 29 мая 2011

Я опишу, что вы делаете здесь:

  1. создание массива целых чисел int[] a = new int[5];
  2. создание ссылки на созданный массив int[] b = a;
  3. добавлениецелое число в массиве «a», позиция 0
  4. перезаписывает ранее добавленное целое число, потому что b [0] указывает на то же место, что и [0]
  5. , добавляя целое число в массив «a»,позиция 1
  6. снова перезаписывает ранее добавленное целое число, потому что b [1] указывает на то же место, что и [1]
0 голосов
/ 29 мая 2011

И a, и b указывают на ( означает ) один и тот же массив.Изменение значения в a или b изменит то же значение для другого.

0 голосов
/ 29 мая 2011

вы не создаете новый экземпляр с помощью int[] b = a

, если вам нужен новый экземпляр (и ожидаемый результат), добавьте clone(): int[] b = a.clone()удачи

...