Übergeben Sie den Wert an die Methode und verarbeiten Sie den Wert in der Methode
Ich wusste nicht, was ich in Java tun sollte, das keine Zeiger hat oder nicht wie C ++ als Referenz übergeben wird, daher war ich während der Untersuchung und Untersuchung verwirrt (hauptsächlich als Referenz übergeben / als Referenzwert übergeben). Ich werde über solche Dinge zusammenfassen.
Obwohl ich einen Artikel schreibe, bin ich seit ungefähr 3 Monaten mit Java in Kontakt. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.
Schreiben Sie beispielsweise den folgenden Code, der den Wert der Methode als Argument in der Methode verdoppelt. (Dieser Code funktioniert nicht wie vorgesehen)
java
public class Main{
/*Verdoppeln Sie den Wert in der Methode*/
public static void twice(int n){
n *= 2;
}
/*Hauptfunktion*/
public static void main(String[] args){
int num = 2;
twice(num);
System.out.println(num); //2
}
}
Infolgedessen wird der Wert von num in der Methode nicht neu geschrieben, und die ursprünglich deklarierte 2 wird unverändert ausgegeben. Dies sieht so aus, als würden Sie die Variable num unverändert an die Methode übergeben, aber nur der Wert in ** num ** wird an die Methode übergeben. Dies wird als ** Übergabe von Wert ** bezeichnet.
Es gibt keinen Zeiger oder keine Referenzübergabe, wenn ich versuche, den Wert neu zu schreiben (ich schreibe ihn jetzt so). Wie soll ich den Wert in Java neu schreiben? Die Methode besteht darin, ein Array oder eine Klassentypvariable zu verwenden.
array
public class Main {
/*Geändert, um ein Array zu übergeben*/
public static void twice(int[] n){
n[0] *= 2;
}
/*Hauptfunktion*/
public static void main(String[] args){
int num[] = new int[1];
num[0] = 2;
twice(num);
System.out.println(num[0]); //4
}
}
Data.java
public class Data {
int num; //Feld zur Datenspeicherung
}
Main.java
public class Main {
/*Geändert, um eine Instanz der Datenspeicherklasse zu übergeben*/
public static void twice(Data ins){
ins.num *= 2;
}
/*Hauptfunktion*/
public static void main(String[] args){
Data data = new Data();
data.num = 2;
twice(data);
System.out.println(data.num); //4
}
}
Warum können Arrays und Instanzen Werte in Methoden neu schreiben? Schauen wir uns nun die Argumente der Java-Methoden an (für diejenigen, die durch Übergabe von Werten, Übergeben von Referenzen, Übergeben von Referenzen verwirrt sind).
Es mag ein irreführender Ausdruck sein, aber ich bin hier gestolpert, also werde ich es zuerst sagen. Java existiert nur nach ** nach Wert **. Vergessen Sie das Übergeben von Referenzen und Übergeben von Werten.
Ich sagte, dass Java nur nach Wert existiert, aber es gibt zwei Arten von Werten, die abhängig vom Typ der Variablen übergeben werden. Zunächst werden die Variablentypen in Java grob in zwei Teile unterteilt. ・ Grundtyp · Referenztyp Es gibt eine Variable von. Und was zu übergeben ist, wenn im Argument jeder Methode festgelegt, ist unterschiedlich.
Zunächst ist der Grundtyp
Datentyp | Numerische Klassifikation |
---|---|
byte | ganze Zahl |
short | ganze Zahl |
int | ganze Zahl |
long | ganze Zahl |
floot | Schwimmende Fraktion |
double | Schwimmende Fraktion |
boolean | Authentizität |
char | Brief |
Es bezieht sich auf. Wenn Sie diese als Methodenargumente übergeben, wird Java nur als Wert übergeben. Mit anderen Worten, nur der Wert des Inhalts der Variablen wird übergeben. Wenn Sie also den Wert des Arguments in der Methode ändern, ändert sich der Wert des übergebenen Arguments nicht.
Dann für den Referenztyp
・ Klassentyp ・ Array-Typ
Und so weiter. Sie übergeben ihren ** Referenzwert **, wenn sie zu Methodenargumenten werden. Was ist nun der Referenzwert hier?
Der Referenzwert ist ein Bild ** Wo die Variable existiert ** Es wird sein. In der Sprache C ist es ein Bild von so etwas wie einem Zeiger.
Java kann keine Argumente innerhalb einer Methode ändern (nicht überraschend, da es nur nach Wert existiert). Wenn Sie jedoch einen Referenzwert übergeben, können Sie den Wert über die Position dieses Referenzwerts neu schreiben.
** Der Referenzwert, dh der Wert des Speicherorts, an dem die Variable vorhanden ist, wird kopiert und als Wert übergeben (der Referenzwert kann natürlich nicht umgeschrieben werden) **. Das Übergeben als Referenz führt die Operation ** Übergeben der Position der Variablen so wie sie ist ** aus. Das Ergebnis ist ein ähnliches Verhalten, aber Java wird nicht als Referenz, sondern als Wert übergeben.
Schreiben Sie den Code, der den Wert in der Methode neu geschrieben hat, mithilfe der Datenspeicherklasse wie folgt um.
Data.java
public class Data {
int num; //Feld zur Datenspeicherung
}
Main.java
public class Main {
/*Übergeben Sie eine Instanz der Klasse*/
public static void twice(Data n){
/*Erstellen Sie eine neue Instanz in einer Methode*/
Data inMethodInstance = new Data();
/*Daten geben*/
inMethodInstance.num = n.num * 2; //4
/*Referenzwert umschreiben*/
n = inMethodInstance;
}
/*Hauptfunktion*/
public static void main(String[] args){
Data data = new Data();
data.num = 2;
twice(data);
System.out.println(data.num); //2
}
}
Wenn Sie zu einem solchen Code wechseln und ihn ausführen, können Sie sehen, dass 2 ausgegeben wird. Wenn die Übergabe als Referenz erfolgt, erfolgt dies am Ende der Methode
n = inMethodInstance
N sollte im Teil von neu geschrieben und 4 ausgegeben werden.
Übrigens, wenn Sie den Code so schreiben, dass der in Java geschriebene Code als Referenz in C ++ übergeben wird, ist dies wie folgt.
data.h
#ifndef DATA_H_
#define DATA_H_
/*Datenspeicherklasse*/
class data
{
public:
int num;
};
#endif
main.cpp
#include <iostream>
#include "data.h"
void twice(data &d) {
/*Instanziieren Sie innerhalb einer Methode*/
data inMethodInstance;
/*Geben Sie der Instanz in der Methode einen Wert*/
inMethodInstance.num = d.num * 2;
/*Schreiben Sie das Argument neu*/
d = inMethodInstance;
}
int main(void)
{
data ins;
ins.num = 2;
std::cout << ins.num << std::endl; //2
twice(ins);
std::cout << ins.num << std::endl; //4
}
In C ++, das auf diese Weise als Referenz übergeben werden kann, kann der Wert des Arguments neu geschrieben werden.
In Java gibt es keine Referenzübergabe. Es gibt nur Wertübergabe. Sie können den Wert jedoch über einen Referenzwert ändern.
Ich denke, Sie könnten fälschlicherweise denken, dass die Übergabe als Referenz in dem Teil existiert, in dem Sie den Wert über einen Referenzwert ändern können, aber Java existiert nur durch Übergabe als Wert.
Dieses Mal habe ich zusammengefasst, was ich über das Umschreiben von Werten in Java-Methoden untersucht habe. Da ich den Artikel zum ersten Mal geschrieben habe, ist er möglicherweise schwer zu lesen, aber bitte werfen Sie einen Blick darauf ...
Recommended Posts