2014-11-11 2 views
2

이 프로그램에서 person1 또는 person3을 변경할 때마다 동일한 값이 포함됩니다. 의사 코드에서 각 단계를 거치려고했지만이 두 객체의 추론이 항상 평등하다는 이유로 길을 잃었습니다. 이 단계를 설명하는 데 도움을 줄 수 있습니까? 나는 정말로 이해하고 싶다. 시간 내 주셔서 감사합니다."person1"개체와 "person2"개체가 같은 이유는 무엇입니까?

public class References1 
{ 
    public static void main (String[] args) 
    { 
     Person person1 = new Person ("Rachel", 6); 
     Person person2 = new Person ("Elly", 4); 
     Person person3 = new Person ("Sarah", 19); 

     System.out.println ("\nThe three original people..."); 
     System.out.println (person1 + ", " + person2 + ", " + person3); 

     // Reassign people 
     person1 = person2; 
     person2 = person3; 
     person3 = person1; 


     System.out.println("\nThe three people reassigned..."); 
     System.out.println (person1 + ", " + person2 + ", " + person3); 

     System.out.println(); 
     System.out.println ("Changing the second name to Bozo..."); 
     person2.changeName ("Bozo"); 
     System.out.println (person1 + ", " + person2 + ", " + person3); 

     System.out.println(); 
     System.out.println ("Changing the third name to Clarabelle..."); 

     person3.changeName ("Clarabelle"); 
     System.out.println (person1 + ", " + person2 + ", " + person3); 
     System.out.println(); 
     System.out.println ("Changing the first name to Harpo..."); 
     person1.changeName("Harpo"); 
     System.out.println (person1 + ", " + person2 + ", " + person3); 
    } 
} 

답변

3

이러한 문제의 원인이 라인은 다음과 같습니다

// Reassign people 
person1 = person2; 
person2 = person3; 
person3 = person1; 

을하면 변수했다 다음 시작 값 :

person1 = "A"; 
person2 = "B"; 
person3 = "C"; 

... 다음을 코드를 통해 실행 :

person1 = person2 -> person1 is now set to "B" (the value "A" is discarded) 

person2 = person3 -> person2 is now set to "C" 

person3 = person1 -> person3 is now set to the value of person1 which is "B" 

이제 변수 person1과 person3이 동일한 객체로 설정됩니다.

2

person1person3 및 동일한 물리적 objectperson2 언급된다. 모든 때문에 이러한 과제 :

person1 = person2;  
person3 = person2; 
0

"이 프로그램에서는 person1 또는 person3을 변경할 때마다 동일한 값을 포함하게됩니다 ...".

그렇진가 :

1) 당신은 person1 = person2;와 레이첼 "고아", 당신은 사라 고아. 결국, 변수 person1과 person3 모두 동일한 객체를 참조하십시오. (Elly).

2)이 시점에서 레이첼과 사라의 개체는 모두 가비지 수집 대상입니다. 액세스 할 수 없습니다.

3) 또한 "Elly"에 대한 변경 사항은 세 변수 모두에 반영됩니다. 왜냐하면 3 개 모두 동일한 기본 객체를 참조하기 때문입니다. 같은 사람 개체에

References to objects

+0

세 개의 개체가 모두 "Elly"를 가리키고 있습니다. – Jason

+0

그 링크는 매우 유용하지만 Jason이 맞다고 생각합니다. person1 또는 person3을 변경하지 않고도 person2를 편집 할 수 있기 때문입니다. 나는 그것을 시험했다. 지금까지 도움을 주셔서 감사합니다. –

1

귀하의 사람 참조 포인트 : 여기

더 자세히 "개체 참조"의 개념을 설명하는 좋은 링크입니다. 다음은 과제의 효과를 보여주는 그림입니다. enter image description here

관련 문제