[Java] Das Referenzwort ist schlecht!

Stolpern Sie immer über die Übergabe von Java-Referenzwerten

Ich höre oft, dass es in Java keine Referenzübergabe gibt. Zuerst dachte ich "Eh", aber ich fasste die Ergebnisse meiner Forschung zusammen.

So übergeben Sie allgemeine Methodenargumente

・ Nach Wert ・ Als Referenz übergeben ・ Referenzwert übergeben

Übergeben von Methodenargumenten in Java

・ Nach Wert ・ Referenzwert übergeben

Beispiel für die Übergabe von Werten

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);
}

Ergebnis

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.

Primitiver Typ

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.

Beispiel für die Übergabe eines Referenzwerts

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");

}

Ergebnis

// 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

Versuchen Sie zu veranschaulichen

参照値渡し.png

Ich werde erklären

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".

Zusammenfassung

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

[Java] Das Referenzwort ist schlecht!
Die Geschichte, das Verhalten von String durch Passieren von Java nicht zu kennen
5. Tag von Java
Wo ist die Zeitzone von Javas LocalDateTime.now ()?
Java als Wert übergeben und als Referenz übergeben
Java "Pass by Reference" Problemzusammenfassung
Java-Referenz zum Verständnis in der Abbildung
Was ist das beste Lesen von Dateien (Java)
Was ist die Hauptmethode in Java?
Die Java EE Security API ist da!
Die Geschichte von Java SE11 Silber erhalten
Was ist das Java Servlet / JSP MVC-Modell?
Der in Java 10 eingeführte Schnittpunkttyp ist erstaunlich (?)
Was bedeutet es, Funktionsparameter als Referenz zu übergeben?
[Java] Beurteilung durch Eingabe von Zeichen in das Terminal
[Java] In der Ausgabe wird etwas als "-0.0" angezeigt
Was ist java
Java8-Methodenreferenz
Was ist Java <>?
Was ist java
Erfahren Sie, was es bedeutet, den Pfad zu übergeben, indem Sie eine Java-Entwicklungsumgebung auf einem Mac erstellen
Java8-Methodenreferenz
JAVA Referenzmaterialien
Meine Java-Referenz
Lesen Sie die Paketerfassung, die von tcpdump mit Java erhalten wurde
Der Vergleich von enum ist == und gleich ist gut [Java]
[JUnit 5] Der Umgang mit "der Referenz von assertEquals ist mehrdeutig"
Was ist besser, Kotlin oder zukünftiges Java?
Gibt an, ob Java-Argumente als Wert oder als Referenz übergeben werden
Anmeldeinformationen, auf die das AWS SDK für Java standardmäßig verweist
Die Geschichte, dass .java auch in Unity 2018 erstellt wurde