[Java] 참고값 전달이 안 좋아요!

Java의 참조 값 전달을 추적해야 합니다.


자바에 인용 전달이 존재하지 않는다고 자주 들었습니다.
처음에는 "에"라고 생각했지만 조사 결과를 총괄했다.

일반 방법의 매개 변수 전달 방법


납품 가격
납품 참조
참조 값 전달

Java에서 메소드 매개변수 전달 방법


납품 가격
참조 값 전달
※ 납품 참조는 Java에 없습니다.
다음은 값 전달, 참조 값 전달입니다.

값 전달 예


RefValHandOver.java
private static void editNumber(int arg){
    arg = 0;
    System.out.println("editNumber : " + arg);
}
public static void main(String[] args) {
    int number = 100;
    editNumber(number);
    System.out.println( "main : " + number);
}

결과

editNumber : 0
main : 100
editNumber에서는 0이지만 main에서는 100을 유지합니다.
매개변수를 기본으로 설정하면 값이 전달됩니다.

기본형


유형
bit
초기 값
boolean
1bit
false
byte
8bit
0
char
16bit
\u0000
short
16bit
0
int
32bit
0
float
32bit
0.0
long
64bit
0
double
64bit
0.0
여기까지는 아무 문제 없죠?

참조 값 전달 예


3가지 모드로 나누어 설명합니다.
・1.메서드에서 데이터를 조작할 때
・2.방법 내에서 new.
・3.방법에null을 대입합니다.
RefValHandOver.java
// 1. メソッド内でデータ操作した場合
private static void methodAddArray(ArrayList<String> arg){
    arg.add("B");
    System.out.println("methodAddArray : " + arg.hashCode() + " : " + arg.toString());
}
//2. メソッド内でnewしなおす。
private static void methodNewArray(ArrayList<String> arg){
    arg = new ArrayList<String>();
    arg.add("C");
    System.out.println("methodNewArray : " +arg.hashCode() + " : " +  arg.toString());
}
//3. メソッド内でnullを代入する。
private static void methodNullArray(ArrayList<String> arg){
    arg = null;
    System.out.println((arg != null) ? "methodNullArray : " + arg.hashCode() + " : " +  arg.toString() : "null");
}

public static void main(String[] args) {
    ArrayList<String> arrayList = new ArrayList<String>() {{add("A");}};
    // 1. メソッド内でデータ操作した場合
    methodAddArray(arrayList);
    System.out.println("main : " + arrayList.hashCode() + " : " +  arrayList.toString());

    //2. メソッド内でnewしなおす。
    methodNewArray(arrayList);
    System.out.println("main : " + arrayList.hashCode() + " : " +  arrayList.toString());

    //3. メソッド内でnullを代入する。
    methodNullArray(arrayList);
    System.out.println((arrayList != null) ? "main : " + arrayList.hashCode() + " : " +  arrayList.toString() : "null");

}

결과

// 1. メソッド内でデータ操作した場合
methodAddArray : 3042 : [A, B]
main : 3042 : [A, B]       //参照先が変わっていない

//2. メソッド内でnewしなおす。
methodNewArray : 98 : [C]
main : 3042 : [A, B]       //参照先が変わっている

//3. メソッド内でnullを代入する。
methodNullArray : null
main : 3042 : [A, B]       //参照先が変わっている 

도해를 시도하다



설명을 해볼게요.


초점은 새 인용을 매개 변수에 대입하는가 하는 것이다.
만약 대입된다면'main 내의 국부 변수'와'방법 내의 매개 변수'는 서로 다른 것이 될 것이다.
※ 자바에 존재하지 않는 참조 전달에서 2, 3의 예는main의 국부 변수에 반영됩니다.

총결산


값 전달, 참조 값 전달에 대해 설명했습니다.
개인적으로 참고값 전달을 참고 주소로 하면 이해하기 쉬울 것 같아요.

좋은 웹페이지 즐겨찾기