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