Java-Referenz zum Verständnis in der Abbildung

Möglicherweise haben Sie in der Java-Programmierung etwas über "Referenzen" gelernt. Einige Leute können es leicht verstehen, andere können es nur irgendwie verstehen, oder einige Leute können es nicht verstehen und sind in Schwierigkeiten. In diesem Artikel werden Diagramme verwendet, um Java "Verweise" auf diejenigen zu erklären, die denken "Ich verstehe es irgendwie, aber ich kann es anderen nicht erklären" oder "Ich kann kein Bild erhalten, selbst wenn es in Worten erklärt wird". Es wird ein Artikel zu tun sein. Die Abbildung ist nicht genau, da sie tatsächlich ausdrückt, was für das Auge unsichtbar ist, und sich aus den Mindestinformationen zusammensetzt. Bitte beachten Sie.

Primitive und Referenztypen

Es gibt zwei Arten von Java-Typen: primitive Typen (Basisdatentypen) und Referenztypen. Primitive Typen sind Typen, die mit allen Kleinbuchstaben beginnen und denen bestimmte Datenwerte (numerische Werte und Zeichen) zugewiesen werden können, die direkt in den Speicher geschrieben werden. Es ist auch eines der Merkmale, dass es keine andere Methode als den Referenztyp gibt.

Modellname Einstufung Größe (Bit)
long ganze Zahl 64
int ganze Zahl 32
short ganze Zahl 16
byte ganze Zahl 8
double Fraktion 64
float Fraktion 32
boolean Authentizität ?
char Brief 16

Die obigen acht sind primitive Typen, und alle anderen sind Referenztypen. Im Gegensatz zum primitiven Typ wird dem Referenztyp ein Zeiger (Adresse im Speicher) auf das neu erstellte Objekt als Referenzwert anstelle eines bestimmten Werts zugewiesen. Das Objekt hier ist gleichbedeutend mit einer Instanz.

Array und String

Diejenigen, die ich persönlich leicht missverstehe, sind Arrays und Strings. Erstellen Sie ein Objekt, da sowohl das Array als auch der String Referenztypen sind.

//Primitiver Typ
int i = 1;
//Referenztyp
int[] array = {1, 2, 3};
String string = "Apfel";

Der Typ int [] wird durch Hinzufügen von zu int ausgedrückt, sodass es leicht zu Missverständnissen kommt. Seien Sie vorsichtig, da der Typ int und der Typ int [] unterschiedlich sind. Der String-Typ weist einen String zu. Beachten Sie jedoch, dass der String als char-Array im String-Objekt behandelt wird. Die unteren drei haben unterschiedliche Notationen für die Objekterstellung, aber sie sind alle gleichwertig. Bitte beachten Sie, dass der gleiche Wert und das gleiche Äquivalent unterschiedliche Bedeutungen haben. Ich wäre Ihnen dankbar, wenn Sie diesen Artikel für das Äquivalent und das Äquivalent lesen könnten.

String a = "Apfel";
String b = new String("Apfel");
String c = new String(new char[]{'Ri', 'Hmm', 'Gehen'});
System.out.println(a); //Apfel
System.out.println(b); //Apfel
System.out.println(c); //Apfel

Ich denke, die meisten String-Typen werden zusammen mit den primitiven Typen in Erinnerung bleiben, wenn Sie anfangen, Java zu lernen. Daher verstehen Leute, die in der Programmierung unerfahren sind, den Unterschied oft nicht tief. Verwenden wir nun ein Diagramm, um den Unterschied zwischen dem primitiven Typ und dem Referenztyp auszudrücken. WS000001.JPG Variablen vom Typ Int weisen Speicherdatenwerte direkt zu. Der Typ int [] erstellt ein Objekt, erweitert es im Speicher und weist den Zeiger dieses Objekts einer Variablen als Referenzwert zu. Der String-Typ sieht folgendermaßen aus, da die interne Variable char [] einen Referenzwert für das Objekt char [] hat. Da es sich um einen Computer handelt, befindet sich das meiste davon im Speicher, aber aus Gründen der Lesbarkeit werden Variablen und Werte separat geschrieben.

Was ist null?

Einer Referenztypvariablen kann Null zugewiesen werden, und es kann ausgedrückt werden, dass für diese Variable kein Referenzziel vorhanden ist. Die java.lang.NullPointerException (sogenannte nullpo) tritt auf, wenn Sie versuchen, eine Methode einer Variablen auszuführen, die keinen Verweis hat. WS000003.JPG

Einer Variablen zuweisen

Eine Variable ist ein Speicherbereich, dem ein Name zugewiesen wurde. Das Speichern eines Werts in diesem Bereich wird als Zuweisung bezeichnet. Die Zuweisung zwischen Variablen bedeutet, dass der Wert auf der rechten Seite kopiert und auf der linken Seite gespeichert wird, um die Daten gemeinsam zu nutzen. WS000007.JPG Wenn Sie die Referenzen nicht verstehen, können Sie nicht richtig programmieren. Lassen Sie uns also eine solide Vorstellung davon bekommen. Schreiben wir nun den Code und sehen, wie die Werte übergeben werden.

//[A] Primitiver Typ
int intA = 1;
int intB = intA;
intB = 2;
System.out.println(intA); // 1
System.out.println(intB); // 2

//[B] Referenztyp
char[] arrayA = {'A', 'B', 'C'};
char[] arrayB = arrayA;
arrayB[0] = 'D';
System.out.println(arrayA[0]); // D
System.out.println(arrayB[0]); // D

 //[C] Referenztyp (unveränderlich)
String stringA = "String";
String stringB = stringA;
stringB = "String";
System.out.println(stringA); //String
System.out.println(stringB); //String

Für [A] ist keine Erklärung erforderlich. Bemerkenswert sind [B] und [C]. [B] wird ArrayB zugewiesen und wirkt sich auf ArrayA aus, [C] jedoch nicht auf StringA. Ich werde auch ein Diagramm verwenden, um zu erklären, was passiert. WS000000.JPG In ③ von [B] wird der Datenwert dem Array von ArrayB zugewiesen. Da das referenzierte Objekt jedoch mit ArrayA identisch ist (dies wird als der gleiche Wert für ArrayA und ArrayB bezeichnet), ist die Ausgabe von ArrayA und ArrayB identisch. .. In [C] wird in ③ ein neues String-Objekt mit "Mojiretsu" erstellt und der Referenzwert stringB zugewiesen, sodass der Verweis auf das "String" -Objekt abgeschnitten wird. Daher ist die Ausgabe von stringA und stringB unterschiedlich. Mit anderen Worten, wenn Sie den Wert des String-Objekts ändern möchten, müssen Sie den Datenwert dem internen char-Array zuweisen. Da die char-Array-Variable in der String-Klasse jedoch in private final definiert ist, kann sie nicht neu geschrieben werden. Ein Entwurf, bei dem der Wert eines Objekts auf diese Weise nicht geändert werden kann, wird als unveränderlich </ b> bezeichnet.

Methodenaufruf

Es ist leicht, den Methodenaufruf falsch zu verstehen. Stellen wir uns also das Verhalten des Programms anhand des Codes und der Abbildung vor.

void main() {

  String string = "String";
  sub(string);
  System.out.println(string); //String

}
void sub(String string) {

  string = "String";

}

Auf den ersten Blick sieht es so aus, als würden Sie der von main in der Submethode übergebenen Variablen einen anderen Wert zuweisen. Beachten Sie jedoch, dass Sie den Referenzwert des Objekts übergeben, auf das die Variable verweist, nicht die Variable. WS000002.JPG Innerhalb einer Methode deklarierte Variablen werden für diese Methode als lokale Variablen bezeichnet und können nur innerhalb dieser Methode verwendet werden. Wir rufen also die Untermethode von der Hauptmethode auf und übergeben das Argument, was bedeutet, dass die Zeichenfolgenvariable der Hauptmethode der Zeichenfolgenvariablen der Untermethode zugewiesen wird. Ich denke, dies ist auch ein Ort, an dem Missverständnisse auftreten können, da die Variablennamen gleich sind.

Schließlich

Es gibt viele Artikel im Web über Java-Referenzen, aber ich denke, die meisten davon werden in Worten und Code erklärt. Wenn Sie einen guten Programmiersinn haben, können Sie ihn selbst verstehen, aber wenn Sie ihn nicht gut verstehen oder gerade erst anfangen zu lernen, hoffe ich, dass dieser Artikel Ihnen ein klares Verständnis vermittelt.

Recommended Posts

Java-Referenz zum Verständnis in der Abbildung
In der Abbildung verstandene Java-Klassen und -Instanzen
[java8] Um die Stream-API zu verstehen
So erhalten Sie das Datum mit Java
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)
Quelle zum Abrufen der Umleitungsquell-URL in Java
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Java-Thread locker zu verstehen
Eingabe in die Java-Konsole
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
Verstehen Sie den groben Fluss von der Anforderung zur Antwort in SpringWebMVC
Siehe C ++ im Android Studio-Modul (Java / Kotlin)
[Android, Java] Praktische Methode zur Berechnung der Differenz in Tagen
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
So leiten Sie den letzten Tag des Monats in Java ab
So wechseln Sie Java in der OpenJDK-Ära auf dem Mac
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
Errate den Zeichencode in Java
Übergeben Sie das Gebietsschema i18n an JavaScript
Multithreaded passend zur [Java] Vorlage
Geben Sie den Java-Speicherort in eclipse.ini an
Wie man JAVA in 7 Tagen lernt
Entpacken Sie die Zip-Datei in Java
Protokollausgabe in Datei in Java
Willkommen im Sumpf der Java-Bibliotheken! !!
Analysieren der COTOHA-API-Syntaxanalyse in Java
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
Versuchen Sie, Yuma in Java zu implementieren
Der Weg von JavaScript nach Java
So verketten Sie Zeichenfolgen mit Java
Rufen Sie die Super-Methode in Java auf
Verstehen Sie, wie die funktionale Programmierung in Java auf einen Schlag eingeführt wurde
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
[Android / Java] Verstehen Sie den Beschreibungstyp in den Listener-Einstellungen (Schaltflächeninstallation).
Beurteilen Sie, ob die zu vergleichenden Zeichenfolgen in Java identisch sind
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist
So ermitteln Sie die Länge einer Audiodatei mit Java
So erhöhen Sie den Wert von Map in einer Zeile in Java
Informationen zum Zurückgeben einer Referenz in einem Java Getter
Holen Sie sich das Ergebnis von POST in Java
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Versuchen Sie, Project Euler in Java zu lösen
[Java] Verwendung der File-Klasse
[Leicht verständliche Erklärung! ] Konvertierung des Referenztyptyps in Java
Einfach, Slack Bot mit Java zu machen
Einführung in Java zum ersten Mal # 2
Versuchen Sie, n-ary Addition in Java zu implementieren
Versuchen Sie es mit der Stream-API in Java
Verstehen Sie die Java-Oberfläche auf Ihre eigene Weise
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Java SE8 Silber ~ Der Weg zum Pass ~
Über das Verfahren, damit Java funktioniert