Java/Java 연습문제

객체생성 연습문제

2주녘 2023. 10. 4. 13:14
반응형

📖 다음 Java 프로그램의 실행결과는?

class Ref {
	int a;
    Ref(int x) {
    	a = x;
    }
    int sum(Ref obj) {
    	int k;
        k = obj.a - a;
        a = 10; obj.a = 20;
        return k;
    }
}

class PassRef {
	public static void main(String[] args) {
    	Ref obj1 = new Ref(3);
        Ref obj2 = new Ref(4);
        int k1 = obj2.sum(obj1);
        System.out.print(" k1= "+k1);
        System.out.print(" obj1.a= "+obj1.a);
        System.out.print(" obj2.a= "+obj2.a);
    }
}

 

💡 풀이

먼저 PassRef 클래스의 메인 함수 영역을 살핍니다.

Ref 형태의 obj1을 생성하였습니다.

생성자에 매개변수 3이 들어가 있어 위의 Ref 클래스에서 매개변수가 int인 생성자를 따라갑니다.

obj1에는 a 라는 변수에 3이 들어가 있습니다.

 

두번째 obj2를 생성하고 a에는 4가 들어가 있습니다.

 

k1 변수에는 obj2의 sum 함수를 실행합니다. 매개변수는 obj1이 들어가 있습니다.

 

sum 함수를 살펴보면

 

k라는 변수가 생성되고 k 변수에는 obj.a 에서 a를 뺀 값을 저장합니다.

 

여기서 obj.a는 obj1의 a 값을 의미합니다.

 

그리고 a는 obj2의 a 값을 의미합니다.

 

그래서 k 변수에는 3 - 4 인  -1이 저장됩니다.

 

그리고 아래 코드에서 변수 a의 값을 10으로 변경하는데 여기서 a는 obj2의 a를 의미합니다.

 

그리고 obj.a = 20의 의미는 obj1의 a 값에 20을 넣어라는 의미입니다.

 

그리고 return 값으로 k의 값인 -1이 리턴됩니다.

 

즉 k1 변수에는 -1이 저장됩니다.

 

출력은 다음과 같이 출력됩니다.

System.out.print(" k1= "+k1);
System.out.print(" obj1.a= "+obj1.a);
System.out.print(" obj2.a= "+obj2.a);

k1= -1 obj1.a = 20 obj2.a = 10

반응형