オブジェクト向けの4つのプロパティ(4):パッケージ(2)
7754 ワード
3.参照変数のコピー
基本データ型変数をコピーすると、
Call By Value(값에 의한 호출)
によって値がコピーされ、2つの変数は互いに影響しません.package reference;
public class CallByValue {
public static void main(String[] args) {
int a = 10;
int b = a;
b = 20;
System.out.println(a); // 10;
System.out.println(b); // 20;
}
}
上記の例では、変数aに10を追加した後、変数aの値を変数bにコピーし、20を変数bに割り当てることができます.このとき,aが持つ値は単純にbにコピーされるだけで,aとb変数には何の関係もないことがわかる.
では、基本データ型を格納するオブジェクトではなく、
객체 참조 변수
をコピーする場合はどうなりますか?このことをCall By Reference(참조에 의한 호출)
またはCall By Address(주소에 의한 호출)
と呼ぶ.次のサンプルコードです.
package reference;
public class CallByReference {
public class void main(String[] args) {
Animal ref_a = new Animal();
Animal ref_b = a;
ref_a.age = 10;
ref_b.age = 20;
System.out.println(ref_a.age) // 20
System.out.println(ref_b.age) // 20
}
}
Class Animal{
public int age;
}
大きな違いがあるかもしれませんが、実際にはCallByValueとCallByReferenceには本質的に違いはありません.ただし、差異がある場合、基本データ型変数は格納された値をそれ自体として解釈し、オブジェクト参照変数は格納された値を주소 또는 포인터
と解釈します.Animalオブジェクトのアドレスを100番とし、上図を下図に示す.
以下のコードを実行して参照オブジェクトの一意の値(アドレスは表示されないが)を表示すると、refaとref bは最終的に同じ値を有することを示す.
package reference;
public class CallByReference2 {
public static void main(String[] args) {
Animal ref_a = new Animal();
Animal ref_b = a;
System.out.println(ref_a); // reference.Aminal@15db9742 - 실행할 때마다 다르다.
System.out.println(ref_b); // 바로 위와 같은 값이 출력된다.
}
}
ref aとref bは全く異なる変数である.同じ値を持つだけで、コンピュータはアドレスとして使用します.結果は、同じオブジェクトを参照する変数が2つしかありません.参照されるオブジェクトは同じで、参照されるオブジェクトの変化の影響のみを受けます.最終的には、「Call By Reference」と「Call By Value」を異なると理解するよりも、「基本データ」変数を格納中の値そのものと理解し、「参照」変数を格納中の値がアドレスであると理解する.
リファレンス
Reference
この問題について(オブジェクト向けの4つのプロパティ(4):パッケージ(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@jsj3282/객체지향의-4대-특성4-캡슐화-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol