2012-04-30 4 views
2

이런 기본적인 질문을 한 것이 매우 유감 스럽지만이 출력이 어떻게 생성되는지 이해할 수 없습니다. 누군가 내 바보 같은 질문에 답할 시간이 있다면, 감사합니다. 미리 감사드립니다. 참조 유형이 어떻게 작동하는지 이해하는 데 어려움을 겪고 있습니다.

이 출력 제공

public class EchoTestDrive { 
    public static void main(String[] args) { 
     Echo e1= new Echo(); 
     Echo e2= new Echo(); 

     int x=0; 
     while(x < 4) { 
      e1.hello(); 
      e1.count=e1.count +1; 

      if(x==3) { 
       e2.count=e2.count+1; 
      } 
      if(x>0) { 
       e2.count=e2.count+e1.count; 
      } 
      x=x+1; 
     } 

     System.outprintln(e2.count); 
    } 
} 

class Echo { 
    int count =0; 
    void hello() { 
     System.outprintln("helloo..."); 
    } 
} 

코드이다 : 지금

helloo... 

helloo... 

helloo... 

helloo... 

10 

우리 에코 선언 24 대신 10을 얻을 E1 = E2; 에코 대신 e2 = 새로운 에코; 나는 이것이 어떻게이 특별한 output.for을 생성하는지 알기를 원한다. 나는 각각의 값을 문자 그대로 넣을 수 있고, 그 답을 얻을 수있다.하지만 내가 평등하게 만들면 어떻게 될까?

답변

11

e2 = e1을 만들면 e1도 같은 개체를 가리키게됩니다.

따라서 카운트가 두 번 증가하여 e1e2이 증가합니다.

둘 다 E1과 E2는 두 개의 서로 다른 객체를 가리키는 따라서 e2.count에 영향을 미치지 않는 E1의 count를 증가하는 Echo e2 = new Echo()Echo e1 = new Echo()

.

편집 : 나는 동일을 설명하기 위해 그림을 추가합니다

.

enter image description here

+0

감사합니다. 많은 mprabhat. – user1020664

+0

당신은 환영합니다 :) – mprabhat

+0

아 ... 괜찮아 .. – user1020664

2

당신이 키워드를 사용하는 경우 "새로운"새 개체를 만듭니다. 예를 들어

는, 다음은

Echo e1= new Echo(); 
Echo e2= e1; 

에 모두 E1과 E2 참조를 할 경우, 그러나,

를 다른 개체

Echo e1= new Echo(); 
Echo e2 new Echo(); 

그리고 두 개체가 서로 독립적를 생성 동일한 객체, e2에 대한 모든 조작은 동일한 새 Echo()를 가리키기 때문에 e1 및 viceversa에도 영향을줍니다.

Echo e1= new Echo(); 
Echo e2= e1; 
e2 = new Echo(); 

이가 E1을 파괴 하는가 :

그러나, 다음 사항을 고려? 내 대답은 아니오 야. e2는 e1을 참조하는 것을 중지하고 대신 새 객체 (따라서 키워드)를 참조합니다.

어쩌면이 질문에 직접 대답하지 않을 수도 있지만 몇 가지 점을 분명히해야합니다.

+0

고마워...... 그것을 얻을 시간을 좀 가져봐. .. – user1020664

관련 문제