Właśnie sprawdzałem niektóre pytania OCJP i natknąłem się na tę różnicę podczas inicjalizacji i wyjątków tablicy String.Tablica napisów bez początkowego rozmiaru daje wyjątek wskaźnika pustego
Case 1
try {
String[][] b = new String[10][10];//1
System.out.println(b[0][0]);//2
} catch (Exception e) {
System.out.println("Exception during array 'b' initialization");
e.printStackTrace();
}
Case 2
try {
String[][] a = new String[10][];//3
System.out.println(a[0][0]);//4
} catch (Exception e) {
System.out.println("Exception during array 'a' initialization");
e.printStackTrace();
}
Linia 2 nie rzuca żadnego wyjątku natomiast linia 4 rzuca wyjątku null pointer. Jednak linia 2 wyprowadza wartość jako null
.
Czy Java ma różnicę w wartościach domyślnych dla inicjalizacji, gdy określono rozmiar tablicy, a kiedy nie?
'i każdy składnik tablicy jest inicjalizowany do wartości domyślnej' , więc linia 3 powinna przypisać 10 'tablice 1-D' i przypisać' null' jako wartość do każdego z jego elementów, prawda? Tak samo jak w przypadku linii 1. Czy mam rację? – redDevil
Przypisuje pustą wartość 'a [0]', 'a [1]', itd. Podczas gdy linia 1 przypisuje wartość null do 'b [0] [0]', 'b [0] [1]' itd. –