Skip to content

Latest commit

Β 

History

History
70 lines (49 loc) Β· 1.92 KB

[Java] Call by Value vs Call by Reference.md

File metadata and controls

70 lines (49 loc) Β· 1.92 KB

Call by value vs Call by Reference

κ°„λ‹¨ν•˜λ©΄μ„œλ„ ν—·κ°ˆλ¦¬λŠ” κ°œλ… 쀑 ν•˜λ‚˜μ΄λ‹€.

κ²°λ‘  : μžλ°”λŠ” Call by Value이닀.

Primitive Type(μ›μ‹œ μžλ£Œν˜•)의 경우 Call by Value

  • int, short, long, float, double, char, boolean

Reference Type(μ°Έμ‘° νƒ€μž…)의 경우 Call by Value

  • Array, μ°Έμ‘° νƒ€μž…

μžλ°”μ—μ„œλŠ” ν•¨μˆ˜μ˜ 인자둜 μ „λ‹¬λ˜λŠ” νƒ€μž…μ΄ κΈ°λ³Έν˜•(μ›μ‹œ μžλ£Œν˜•)인 경우 값을 λ„˜κΈ°κ²Œ λ˜μ–΄μžˆλ‹€. 이 경우 λ©”λͺ¨λ¦¬μ—λŠ” ν•¨μˆ˜λ₯Ό μœ„ν•œ λ³„λ„μ˜ 곡간이 μƒμ„±λœλ‹€. μ΄λŠ” ν•¨μˆ˜ μ’…λ£Œμ‹œ 사라진닀. λ”°λΌμ„œ ν•¨μˆ˜ μ•ˆμ—μ„œ ν•΄λ‹Ή 인자의 값을 λ³€κ²½ν•˜λ”λΌλ„ 원본 값은 λ°”λ€Œμ§€ μ•ŠλŠ” νŠΉμ§•μ΄ μžˆλ‹€.

public class Test {
    public static void main(String[] args) {
        int n = 10;
        System.out.println(n);
        test(10);
        System.out.println(n);
        // 값이 λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€λŠ” κ±Έ λ³Ό 수 μžˆλ‹€. 
    }

    public static void test(int n) {
        n -= 5;
        System.out.println(n);
    }
}
// κ²°κ³Ό
10
5
10

μ°Έμ‘°ν˜•(μ°Έμ‘° νƒ€μž…)인 경우, λ³€μˆ˜κ°€ κ°€μ§€λŠ” 값이 μ£Όμ†Œ κ°’μ΄λ―€λ‘œ Call by Value에 μ˜ν•΄ μ£Όμ†Œ 값이 μ „λ‹¬λœλ‹€. λ”°λΌμ„œ ν•¨μˆ˜ μ•ˆμ—μ„œ ν•΄λ‹Ή 인자의 값을 λ³€κ²½ν•˜κ²Œ 되면 μ£Όμ†Œκ°’μ„ 톡해 μ°Έμ‘°ν•˜κ³  μžˆλŠ” 값을 λ³€κ²½ν•˜κΈ° λ•Œλ¬Έμ— 원본 값도 λ°”λ€Œκ²Œ λ˜λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        for (int num : arr) System.out.print(num + " ");
        System.out.println();
        test(arr);

        for (int num : arr) System.out.print(num + " ");
    }

    // μ°Έμ‘°ν˜•μ˜ 경우, μ£Όμ†Œκ°’μ΄ μ „λ‹¬λ˜λ―€λ‘œ 값을 λ³€κ²½ν•˜λ©΄ 원본도 영ν–₯을 λ°›λŠ”λ‹€.
    public static void test(int[] a) {
        for (int i = 0; i < a.length; i++) {
            a[i] *= 10;
        }
    }
}
// κ²°κ³Ό
1 2 3 
10 20 30 

Ref : https://bcp0109.tistory.com/360