카테고리 없음

자바의 정석(Ch4,Ch6)

suuuki 2024. 10. 29. 22:09

Ch4

package question.q04;

public class Question04_01 {
    public static void main(String[] args) {
        int i= 5;

        while(i-- !=0) {
            System.out.println(i + " - I can do it.");
        }
    }
}

 

4 - I can do it.
3 - I can do it.
2 - I can do it.
1 - I can do it.
0 - I can do it.

 

i--여서 while(i-- != 0)에서 1일때 0으로 바뀐 i =0값이 System.out.println(i + " - I can do it.");으로 출력되서 나온다


Ch6

package question.q06;

class Data {
    int x;
}

public class Question06_01 {
    public static void main(String[] args) {
        Data d = new Data();
        d.x = 10;
        System.out.println("main() : x = "+ d.x);

        change(d.x); //함수 호출
        System.out.println("After change(d.x)");
        System.out.println("main() : x = "+ d.x);
    }
    static void change(int x) { //기본형 매개변수
        x = 1000;
        System.out.println("change() = " + x);
    }
}
결과값
main() : x = 10
change() = 1000  
After change(d.x)
main() : x = 10

 

여기서 change()의 값이 먼저 나오게 된 이유는

change(d.x); 함수를 호출했기 때문에 결과값에서 change() = 1000이 먼저 나온다


package question.q06;

class Data2 {
    int x;
}

public class Question06_02 {
    public static void main(String[] args) {
        Data2 d = new Data2();
        d.x = 10;
        System.out.println("main() : x = "+ d.x);

        change(d);
        System.out.println("After change(d)");
        System.out.println("main() : x = "+ d.x);
    }
    static void change(Data2 d) { //참조형 매개변수
        d.x = 1000;
        System.out.println("change() = " + d.x);
    }
}

 

main() : x = 10
change() = 1000
After change(d)
main() : x = 1000

 

여기서는 처음과 다르게       의 값이 10-> 1000으로 변경된다main() : x =      

처음에는 기본형 매개변수여서 int x 여서 change메서드에서 매개변수 x의 값이 변경되서 main의 값은 변경되지 않고

밑에는 참조형 매겨변수여서 변수 d의 주소가 매개변수 d에 복사되어서 main의 값도 변경되었다 

 

[참고자료]

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99

 

☕ 그림으로 보는 자바 코드의 메모리 영역(스택 & 힙)

자바의 메모리 영역 이번 포스팅에선 자바(JAVA)를 사용하는 입장에서 알아야 할 메모리 구조 및 특징에 대해서 알아보려고 한다. 자바 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모

inpa.tistory.com


package question.q06;

public class Question06_03 {
    public static void main(String[] args) {
        MyMath3 mm = new MyMath3();
        System.out.println("mm.add(3, 3) 결과:"    + mm.add(3,3)); 
        System.out.println("mm.add(3L, 3) 결과: "  + mm.add(3L,3));
        System.out.println("mm.add(3, 3L) 결과: "  + mm.add(3,3L));
        System.out.println("mm.add(3L, 3L) 결과: " + mm.add(3L,3L));

        int[] a = {100, 200, 300};
        System.out.println("mm.add(a) 결과: " + mm.add(a));
    }
}

class MyMath3 {
    int add(int a, int b) {
        System.out.print("int add(int a, int b) - ");
        return a+b;
    }

    long add(int a, long b) {
        System.out.print("long add(int a, long b) - ");
        return a+b;
    }

    long add(long a, int b) {
        System.out.print("long add(long a, int b) - ");
        return a+b;
    }

    long add(long a, long b) {
        System.out.print("long add(long a, long b) - ");
        return a+b;
    }

    int add(int[] a) {   
        System.out.print("int add(int[] a) - ");
        int result = 0;
        for(int i=0; i < a.length;i++)
            result += a[i];

        return result;
    }
}
int add(int a, int b) - mm.add(3, 3) 결과:6
long add(long a, int b) - mm.add(3L, 3) 결과: 6
long add(int a, long b) - mm.add(3, 3L) 결과: 6
long add(long a, long b) - mm.add(3L, 3L) 결과: 6
int add(int[] a) - mm.add(a) 결과: 600

add메서드가 println메서드보다 먼저 호출되는 이유

 System.out.println("mm.add(3, 3) 결과:"    + mm.add(3,3)); 

여기서 mm.add가 실행되기 위해서는 밑에 add메서드가 먼저 실행 되어야 되서,

이때 Systehttp://m.out.print("int add(int a, int b) - "); 이부분이 println보다 몇초 빨리 실행하게 되서 먼저 나오게 되는거다