2013-02-25 3 views
0

Я читал в сети и нашел ссылки на хранилище ссылок. Ссылки в смысле массив собирается хранить адрес памяти переменных i Угадайте, если я не ошибаюсь. Если это так, почему я не вижу адрес памяти, когда я перебираю строковый массив как ниже.В чем разница между примитивным массивом и массивом ссылки.

String[] arrNames = new String[3]; 
    arrNames[0]  = "John"; 
    arrNames[1]  = "Mac"; 
    arrNames[2]  = "Alex"; 

Теперь согласно определению массив arrNames будет хранить ссылки на arrNames [0], arrNames [1], arrNames [2]. Это означает адрес памяти, который будет указывать на имена i.eJohn, Max и Alex.

Если это примитивный массив, он будет непосредственно хранить значения, как показано ниже.

int[] Num = new int[3]; 
Num[0] = 1; 
Num[1] = 2; 
Num[2] = 3; 

The Num [0] будет прямо перемещать номера 1 вместо адреса, который указывает на число.

Пожалуйста, исправьте меня, если я его неправильно понял.

+3

Это же как разница между примитивной переменным и переменным объектом, за исключением того, что есть больше из них. Java скрывает адреса от вас намеренно. –

+0

Итак, объектная переменная будет хранить адрес памяти правильно –

+1

Нет, переменная объекта хранит ссылку на объект, которая является абстрактной вещью, о которой Java действительно не хочет беспокоиться. На низком уровне да, это в основном указатель. http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.3.1 –

ответ

1

В java нет примитивного массива. Несмотря на то, что в массиве были примитивные значения, тогда сам массив рассматривался как объект массива.

0

Примитивные массивы и справочные массивы - точно подобный объект.

Кроме того, значение по умолчанию также применяется с примитивным массивом:

int[] myPrimitiveArray = new int[1]; 

assertTrue(myPrimitiveArray[0], 0)  //passed since 0 by default in each cell 

же, как:

Integer[] myReferenceArray = new Integer[1]; 

assertTrue(myPrimitiveArray[0], 0)  //passed since 0 by default in each cell 
Смежные вопросы