Technisch ist es natürlich möglich, es zu tun. Das automatische Binden/Unboxing von primitiven Array zu Wrapper Array ist jedoch mehr als das, was Sie erwarten.
Zuerst schauen Sie in das automatische Boxen/Unboxing von Java: Was es tut, ist einfach eine Syntaxzucker, um Sie zu sparen, den primitiven Wrappercode eintippend. z.B.
Integer i = 10;
Compiler weiß, dass es eine Integer
erwartet, aber int
stattdessen vorhanden. Deshalb, was der Compiler tun ist, Ihren Code zu übersetzen:
Integer i = Integer.valueOf(10);
Es tut ähnliche Sache für Unboxing: wenn in Situation, dass es erwartet int
aber Integer
vorhanden ist, Compiler ersetzen Sie es mit varName.intValue()
Zurück zum Array. Es gibt zwei Probleme, die wir vorhersehen können:
Das erste Problem besteht darin, dass es keine direkte Möglichkeit gibt, von einem int-Array in ein Integer-Array zu transformieren. Sie können argumentieren, dass der Compiler
int[] intArray = ....;
Integer[] wrapperArray = intArray ;
zu
Integer[] wrapperArray = new Integer[intArray.size()];
for (int i = 0; i < intArray.size(); i++) {
wrapperArray[i] = Integer.valueOf(intArray[i]);
}
aber das scheint zu viel für einen Syntax Zucker umwandeln kann.
Das zweite große Problem ist, wenn Sie es als Parameter zu einer Methode übergeben, wenn Autoboxing/Unboxing für Array passiert, anstelle der Referenz des ursprünglichen Arrays übergeben wird, übergeben Sie jetzt die Referenz einer Kopie der Original-Array.Wenn Sie den Inhalt des Arrays in Ihrer Methode ändern, wird das ursprüngliche Array nicht beeinflusst. Das kann dir viele Überraschungen bringen.
z.B.
void foo(Integer[] arr) {
arr[0] = 0;
}
// invoking foo in some code:
int[] intArr = new int[]{9,8,7,6};
foo(intArr);
// intArr[0] will still be 9, instead of 0
Vielen Dank Rohit. Ich habs! – namalfernandolk
@NamalFernando Gern geschehen :) –