2011-10-04 2 views
4

나는 내 친구와 논쟁하고있다.Java에서의 참조. 두 가지 예가 무엇입니까?

은 다음과 같습니다

public class Thing 
{ 
    private Thing s; 
    public void foo(Thing t) 
    { 
     s = t; 
     t.s = this; 
    } 
} 

같은과 같이

public class Thing 
{ 
    private Thing s; 
    public void foo(Thing t) 
    { 
     s = t; 
     s.s = this; 
    } 
} 

나는의 두 경우 모두에서 T로 설정되어 있기 때문에 그 같은 생각했지만 그들은있어

+0

예, 그것은 동일합니다. 't'와's'는 같은 객체에 대한 참조 (메모리 포인터)입니다. – Augusto

답변

6

을 동의 동일한 참조로 설정했기 때문에 마찬가지입니다.

그러나 두 가지 용도가 new 인 경우 참조가 다르므로 친구가 올바른 것입니다.

1

개체는 Java에서 참조로 전달됩니다. 이들은 모두 같아야합니다.

+1

이 토론을 위해 당신은 정확합니다. 일부는 참조로 Java 전달에 동의하지 않을 수도 있습니다. 그것은 단순히 객체 참조의 사본을 값으로 전달하기 때문에 한 줄의 생각을 말합니다. 흥미로운 글은 [Java가 참조로 전달됩니까?] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference). –

1

나는 또한 같다고 생각하지만 분명히 확인할 수 있습니다. 두 객체의 println을 수행하면됩니다. 당신은 tostring() 메소드를 구현하지 않았기 때문에, 힙에 위치를 출력 할 것입니다. 위치가 동일하면 올바른 위치에 있습니다.

0

변수 이름을 변경하고 명시 적으로 명확하게 할 수 this를 작성 :

은 다음과 같습니다

public class Node 
{ 
    private Node next; 
    public void foo(Node t) 
    { 
     this.next = t; 
     t.next = this; 
    } 
} 

과 동일 :

public class Node 
{ 
    private Node next; 
    public void foo(Node t) 
    { 
     this.next = t; 
     this.next/*==t*/.next = this; 
    } 
} 
관련 문제