Ich höre oft, dass es in Java keine Referenzübergabe gibt. Zuerst dachte ich "Eh", aber ich fasste die Ergebnisse meiner Forschung zusammen.
・ Nach Wert ・ Als Referenz übergeben ・ Referenzwert übergeben
・ Nach Wert ・ Referenzwert übergeben
RefValHandOver.java
private static void editNumber(int arg){
arg = 0;
System.out.println("editNumber : " + arg);
}
public static void main(String[] args) {
int number = 100;
editNumber(number);
System.out.println( "main : " + number);
}
editNumber : 0
main : 100
Es ist 0 in editNumber, aber es bleibt 100 in main. Wenn das Argument ein primitiver Typ ist, wird es als Wert übergeben.
Schimmel | bit | Ursprünglicher Wert |
---|---|---|
boolean | 1bit | false |
byte | 8bit | 0 |
char | 16bit | \u0000 |
short | 16bit | 0 |
int | 32bit | 0 |
float | 32bit | 0.0 |
long | 64bit | 0 |
double | 64bit | 0.0 |
Bisher gibt es kein besonderes Problem.
Ich werde es erklären, indem ich es in drei Muster klassifiziere. ・ 1. Wenn Daten in der Methode bearbeitet werden ・ 2. Erneuern Sie die Methode. -3. Ersetzen Sie die Methode durch null.
RefValHandOver.java
// 1.Wenn Daten in einer Methode bearbeitet werden
private static void methodAddArray(ArrayList<String> arg){
arg.add("B");
System.out.println("methodAddArray : " + arg.hashCode() + " : " + arg.toString());
}
//2.Erneuern Sie die Methode.
private static void methodNewArray(ArrayList<String> arg){
arg = new ArrayList<String>();
arg.add("C");
System.out.println("methodNewArray : " +arg.hashCode() + " : " + arg.toString());
}
//3.Weisen Sie in der Methode null zu.
private static void methodNullArray(ArrayList<String> arg){
arg = null;
System.out.println((arg != null) ? "methodNullArray : " + arg.hashCode() + " : " + arg.toString() : "null");
}
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>() {{add("A");}};
// 1.Wenn Daten in einer Methode bearbeitet werden
methodAddArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//2.Erneuern Sie die Methode.
methodNewArray(arrayList);
System.out.println("main : " + arrayList.hashCode() + " : " + arrayList.toString());
//3.Weisen Sie in der Methode null zu.
methodNullArray(arrayList);
System.out.println((arrayList != null) ? "main : " + arrayList.hashCode() + " : " + arrayList.toString() : "null");
}
// 1.Wenn Daten in einer Methode bearbeitet werden
methodAddArray : 3042 : [A, B]
main : 3042 : [A, B] //Das Referenzziel hat sich nicht geändert
//2.Erneuern Sie die Methode.
methodNewArray : 98 : [C]
main : 3042 : [A, B] //Das Referenzziel hat sich geändert
//3.Weisen Sie in der Methode null zu.
methodNullArray : null
main : 3042 : [A, B] //Das Referenzziel hat sich geändert
Der Fokus liegt darauf, ob Sie dem Argument einen neuen Verweis zuweisen. Bei Zuweisung unterscheiden sich die "lokale Variable in main" und das "Argument in der Methode".
Wir haben ___ als Wert ___ und ___ als Referenz ___ übergeben beschrieben. Persönlich denke ich, dass es einfacher zu verstehen wäre, wenn die Übergabe des Referenzwerts ___ die Übergabe der Referenzadresse ___ </ span> ist.
Recommended Posts