Wann wird ein "void" - Methode Einfluss auf die parameter, und wenn hat es Auswirkungen auf das original-Objekt?
Ich bin ganz neu in der Programmierung, als auch auf dieser website, so verzeihen Sie mir, wenn ich die Schraube etwas. Ich habe einen Teufel von einer Zeit, herauszufinden, wie man richtig poste meinen code hier.
package tester;
import java.util.*;
public class Mainclass2 {
public static void main(String[] args) {
int y = 3;
int[] x = {1, 2, 3, 4};
editnumbersArray(x);
editnumbersNotArray(y);
System.out.println(x[2]); **//now this was changed from 3 to 9...**
System.out.println(y); //but this one went unchanged.
}
//this accepts 'x[]' into the 'a[]' parameter.
public static void editnumbersArray(int[] a){
a[2] = 9; **//<---why does this one CHANGE the actual x[2] instead of just a[2]?**
}
//this accepts 'y' into the 'a' parameter.
public static void editnumbersNotArray(int a){
a = 9; **//<--while this one only changes 'a' instead of 'y'?**
}
}
Also meine Frage ist im Grunde eingegeben, dort als Kommentare. Warum tut Sie das array, das übergeben wird in der Methode ändern Sie die Werte des ursprünglichen Arrays (x[]) wenn int übergeben wird, in der anderen Methode nicht ändern? Ich bin sicher, es ist eine einfache Antwort, aber wenn ich habe meine Forschung konnte ich nicht herausfinden, was Sie suchen. Ich weiß nicht, was dies heißt also, alles, was ich suchte, führte mich der falsche Weg. Vielen Dank für jede Hilfe!!!!
BEARBEITEN: vielen Dank für die Analogie mit der Adresse! Das ist bei weitem der beste Weg, hätte man es mir erklärt. Also im Grunde, wenn Sie weitergeben ein array in ein parameter, dessen übergabe einer Referenz, nicht der tatsächliche Wert? Also wenn ich Einstellungen in meiner Methode, die seinen ändern, was auch immer das array auf?
Ich bemerkte, dass dies auch passiert mit eine Liste. Also ist die Liste nicht eigentlich durch Wert übergeben? Es scheint, als ob das array/die Liste selbst ist im Grunde bestanden für die Bearbeitung, egal, was ich es nennen, die in meiner Methode (a[] in diesem Fall).
BEARBEITEN http://javadude.com/articles/passbyvalue.htm diese Seite wirklich gelöscht es. Und sorry für die Buchung eine doppelte Frage. Das problem war, dass ich nicht wusste, was ich versucht habe zu Fragen. Ich hatte noch nie gehört, diese Begriffe "pass-by-value/reference", so dass ich nun wissen,
- Eine der besseren Antworten auf diese Frage, die gestellt wurde in so vielen Formen schon: stackoverflow.com/a/9404727/680925
- mögliche Duplikate von Java "pass-by-reference"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie den Wert des Parameters selbst nie betrifft das argument in Java, weil alle Argumente, die als Wert übergeben werden. Achten Sie jedoch auf diese Methode:
Zuordnung nicht ändern Sie den Wert des Parameters. Der Wert von
a
ist immer noch die gleiche Referenz, die auf das gleiche array - es ändert nur den Inhalt des Arrays.Vorstellen, wenn ich schrieb meine Adresse auf ein Stück Papier für Sie. Es würde keine Rolle, was du getan hast, um das Stück Papier - das würde sich nicht ändern, wo ich wohnte. Allerdings, wenn Sie besuchten die Adresse und lackiert die vordere Tür grün, ohne jemals ändern Stück Papier an alle, ich würde sehen, dass ändern.
Es ist sehr wichtig zu unterscheiden zwischen verschiedenen Konzepten:
int
) oder eine Referenz. In meinem Beispiel oben, das Papier wurde wie die variable.Ein array ist ein Objekt, das als container für andere Variablen. Also der Wert von
a
ist nur ein Verweis auf das array.Benutzt Java als Wert übergeben (was Sie suchen) für alles. Im wesentlichen, dass heißt, es macht eine Kopie der parameter, es geht dann um die Methode. Das bedeutet, dass Sie kann nicht ändern, was etwas Punkte an, indem Sie Sie mit der = - operator.
Deshalb ist die
(int a)
version nicht ändern.Jedoch, im Fall von ein-Objekt oder ein array ist damit nicht eine Kopie des Objekts oder Arrays, es wird eine Kopie der Referenz auf das Objekt oder das array. Das bedeutet, dass Sie zwei Variablen, die original-und die, in deinem Beispiel
(int[] a)
man, dass beide auf der gleichen Stelle im Speicher. Änderungen beider Variablen beeinflussen die anderen Variablen.Wertübergabe, referenzübergabe, und übergeben Sie die Referenz durch Wert sind die Arten von Dinge, die Sie suchen möchten, auf weitere Informationen.