So ändern Sie das Argument in der [Java] -Methode (für diejenigen, die durch Übergabe von Werten, Übergeben von Referenzen, Übergeben von Referenzen verwirrt sind)

zunaechst

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

Wert übergeben

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.

Umschreiben von Werten in Java

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.

Beispiel für die Verwendung eines Arrays

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
    }  
}
Beispiel für die Verwendung einer Klasse zum Speichern von Werten

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

Java-Methodenargumente

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.

Was wird in Java an die Methode übergeben?

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.

Zum Zeitpunkt des Basistyps

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.

Wenn es sich um einen Referenztyp handelt

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?

Was ist ein Referenzwert?

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.

Warum der Wert in der Methode neu geschrieben wird

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.

Was unterscheidet sich von der Referenzübergabe?

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

Ein Beispiel, das zeigt, dass Sie einen Referenzwert für 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.

Das Übergeben als Referenz existiert in Java nicht

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.

Am Ende

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

So ändern Sie das Argument in der [Java] -Methode (für diejenigen, die durch Übergabe von Werten, Übergeben von Referenzen, Übergeben von Referenzen verwirrt sind)
Gibt an, ob Java-Argumente als Wert oder als Referenz übergeben werden
[Java] So suchen Sie mit der Methode includes nach Werten in einem Array (oder einer Liste)
Beschreiben in mehreren Methoden So übergeben Sie Argumente So verwenden Sie den Rückgabewert Methodenüberladung Übergeben von Wert und Übergeben von Referenz
(Java) Implementieren von equals () für eine Klasse mit durch Vererbung hinzugefügten Wertelementen
[Java] So erhalten Sie den Schlüssel und den Wert, die in Map gespeichert sind, durch iterative Verarbeitung
[Für diejenigen, die Portfolios erstellen] Verwendung von Font-Awesome-Rails
Zusammenfassung der Implementierung von Standardargumenten in Java
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
[Für diejenigen, die Portfolios erstellen] Verwendung von Chart Kick
[Für diejenigen, die Portfolios erstellen] So lassen Sie Zeichenketten weg
[Java] Wie schreibe ich, wenn ich zwei oder mehr Argumente an super übergebe?
So erhöhen Sie den Wert von Map in einer Zeile in Java
[Für diejenigen, die Portfolios erstellen] Verwendung von binding.pry mit Docker
[Java] Verwendung der Join-Methode
Wie man JAVA in 7 Tagen lernt
Java als Wert übergeben und als Referenz übergeben
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
So verketten Sie Zeichenfolgen mit Java
[Java] Übergeben Sie Argumente an den Konstruktor in Mockito / Set default call to method an callRealMethod
So testen Sie eine private Methode und verspotten sie teilweise in Java
Java Programmer Gold SE 8 Qualifikationsübersicht (für diejenigen, die mit Java vertraut sind)
So ändern Sie den Wert einer Variablen an einem Haltepunkt in IntelliJ
[Java] [Für Anfänger] So fügen Sie Elemente direkt in ein zweidimensionales Array ein
So verweisen Sie auf eine Spalte, wenn Sie die Spaltennamensmethode in ActiveRecord überschreiben
So erstellen Sie Ihre eigene Anmerkung in Java und erhalten den Wert
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Java-Referenz zum Verständnis in der Abbildung
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Verwendung der Submit-Methode (Java Silver)
So führen Sie eine Basiskonvertierung in Java durch
[Java] Verwendung der toString () -Methode
Wie man Parameter in der link_to-Methode hat
Ändern Sie die Liste <Optional <T >> in Java in Optional <Liste <T >>
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
So erhalten Sie das Datum mit Java
[Für Anfänger] So debuggen Sie mit Eclipse
Verketten von durch Kommas getrennten Zeichenfolgen mit StringJoiner auch in einer Java7-Umgebung
[Java] Verschiedene Methoden, um den in List gespeicherten Wert durch iterative Verarbeitung zu ermitteln
[Java] So erhalten Sie HashMap-Elemente per Schleifensteuerung mithilfe der erweiterten for-Anweisung
So erstellen Sie eine Beurteilungsmethode, um nach einem beliebigen Zeichen im Array zu suchen