メソッドで渡される変数を変更したのに、なぜ変更できないのですか?
Question
Q1. 特定のメソッドに渡されるパラメータ[inta=10]を1000に変更します.
しかしなぜ変更が「ダメ」なのでしょうか?
Q2. 特定のメソッドに渡されるパラメータ[inta=10]を1000に変更します.
しかしなぜ、変更は「できる」のでしょうか.
Answer java変数は2つのクラスに分けることができます.基本型(primitive type)と参照型(reference type). 基本型は私たちがよく知っている[byte、short、int、long、short、long、booleanなど]. を除いて、すべてのタイプは参照型です. 両者の違いはいろいろありますが、この文章の質問に答えるためには、一つのことを知るだけです.基本型は実際のデータの値を格納し、参照型はデータのメモリアドレスを格納する. Q1 Answer Q 1でchange(int b)メソッドが呼び出されるにつれて、data.x値はパラメータaにコピーされる. data.xとaは同じ値のみで、異なるメモリアドレスに格納されます. データは aの値を1000に変更します.xには影響しません. Q2 Answerデータは参照型です. Q 2「変更」(Data a)メソッドを呼び出し、データのメモリアドレスをパラメータaにコピーする. パラメータaは、データのようなオブジェクトを指す. bの変更によりaに反映される. 参考資料ジャワの晶石、南宮星知音. https://docs.oracle.com/javase/specs/jvms/se16/html/jvms-2.html#jvms-2.4
Q1. 特定のメソッドに渡されるパラメータ[inta=10]を1000に変更します.
しかしなぜ変更が「ダメ」なのでしょうか?
class Data {
int x;
}
public class Main {
public static void main(String[] args) {
Data data = new Data();
data.x = 10;
change(data.x);
System.out.println(data.x);
}
static void change(int a) {
a = 1000;
}
}
10Q2. 特定のメソッドに渡されるパラメータ[inta=10]を1000に変更します.
しかしなぜ、変更は「できる」のでしょうか.
class Data {
int x;
}
public class Main {
public static void main(String[] args) {
Data data = new Data();
data.x = 10;
change(data);
System.out.println(data.x);
}
static void change(Data a) {
a.x = 1000;
}
}
1000Answer
Reference
この問題について(メソッドで渡される変数を変更したのに、なぜ変更できないのですか?), 我々は、より多くの情報をここで見つけました https://velog.io/@outgrow0905/메서드에서-전달받은-변수를-분명히-변경했는데-왜-변경이-안될까テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol