Per cominciare, nel primo caso si finisce con una variabile di tipo String[]
, ma nel secondo caso si finisce con quattro variabili di tipo String
.
Qual è la differenza tra un array e un gruppo di variabili? :)
Supponendo che tu sia più interessato alla differenza tra il codice equivalente che produce un array:
Object[] obj = str;
String[] p = (String[]) obj;
e
Object[] obj = str;
String[] p = new String[] {
(String)obj[0],
(String)obj[1],
(String)obj[2],
(String)obj[3]};
le principali differenze sono:
- Il secondo snippet di codice crea una nuova matrice. Se dovessi fare
str[2] = "blah";
dopo aver eseguito il primo snippet, quindi p[2]
conterrà anche "blah", perché p
e str
sono riferimenti allo stesso array. Con il secondo snippet, p[2]
conterrebbe ancora "Ghi"
.
-
Il secondo snippet di codice funziona indipendentemente dal tipo di str
. Se str
è stato effettivamente creato come:
Object[] str = {"Abc","Ghi","Def","Mno"};
quindi il primo snippet genererebbe un ClassCastException
perché l'oggetto obj
si riferisce a non a String[]
. Il secondo frammento funzionerebbe correttamente purché tutti gli elementi fossero String
s.
- Il secondo snippet genera
ArrayIndexOutOfBoundsException
se l'array ha meno di quattro elementi e copia solo i primi quattro elementi se ne ha più di quattro. Tuttavia, potresti facilmente scrivere una versione che potrebbe funzionare per un numero arbitrario di elementi.