2012-05-18 2 views
-2

Если я инициализировать массив в методе Java, как:окончательный 2D массив в Java

final double[][] myArray = new double[r][c]; 

Будет ли мне позволено сделать это позже в методе?

myArray[0] = new double[c]; 
+2

Да. Разве вы не попробовали это для себя? –

ответ

2

Я приведу вам пример этого:

public class Main { 
    public static void main(String[] args) { 
     final int[] finalArray = new int[5]; 
     finalArray[0] = 10; 
     System.out.println(finalArray[0]); 
     finalArray[0] = 9001; 
     System.out.println(finalArray[0]); 
     finalArray = new int[5] //compile error!!! 
    } 
} 

Это происходит потому, что модификатор final будет сказать, что ссылка на массив (указатель) не может измениться, но элементы массива (которые могут иметь другой указатель) могут быть изменены без проблем.

EDIT:

Другой пример с 2d массив:

public class Main { 
    public static void main(String[] args) { 
     final int[][] array2d = new int[5][]; 
     for(int i = 0; i < array2d.length;i++) { 
      array2d[i] = new int[6]; 
     } 
     //the size of the rows can change with no problem. 
     array2d[0] = new int[8]; 
    } 
} 
+0

Благодарим вас за конструктивный ответ. В двумерном случае могу ли я предположить, что каждая отдельная строка моего массива является другим массивом с указателем, и я меняю свою ссылку, когда я это делаю? – Erol

+0

Да, если вы попробуете код, он будет работать. Я сделаю обновление с примером этого. –

3

Да, вы можете. Более подробную информацию о массивах http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

+0

Непонятно, как ссылка связана с вопросом точно – Attila

+0

Я был заинтересован в последнем ключевом слове, потому что в другом месте я читал, что такая инициализация не позволит мне изменить ссылку на массив. Разве я не изменяю ссылку таким образом? – Erol

+0

Вы изменяете ссылку только на один элемент, который разрешен. – Celeritas

Смежные вопросы