2017-04-03 1 views
1

개체는 값으로 전달되지만 참조 값은 전달된다는 것을 알고 있습니다. 나는 연결리스트했다 그래서 지금Java에서 참조는 어떻게 작동합니까?

ListNode n = new ListNode(3); 
ListNode n1 = new ListNode(4); 
n.next = n1; 

:

n -> n1 -> null 

지금 내가 뭔가를 가정

//Definition for singly-linked list. 
    public class ListNode { 
     int val; 
     ListNode next; 
     ListNode(int x) { val = x; } 
    } 

내가 그런 짓을 :

그래서 내가 클래스가 있다고 가정 해 like :

/* Previous code from above 
ListNode n = new ListNode(3); 
ListNode n1 = new ListNode(4); 
n.next = n1; */ 

ListNode ref = n; 
n = n.next; 

ref 지금은 무엇입니까? 값은 같은 3 -> 4 -> null으로 표시되는 경우

+6

"개체가 참조로 전달되는 것을 알고 있습니다." 아니야, 그들은 그렇지 않아. https://stackoverflow.com/questions/40480 –

+2

'ref'는 할당시'n' 참조의 참조를 가리 킵니다. 그래서 "원래" "n"입니다. –

+0

'n'은 자체를 참조하기 때문에 ref는 'n'을 가리킬 것입니다 –

답변

2

연결된 목록 처음

n -> n1 -> null 다음과 같다. 만약 ListNode ref = n; 할 때 n = n.next; 참조 변수 nref이 assignement 의해 영향을받지 않는 값 4. 참조 변수 노드로 지칭 할 때

다음 ref 지금 값 3

와 노드로 지칭한다. ref 여전히 n = n.next했다하지 대신 ListNode ref = n;을 수행 한 후 값이 refn으로 모두 true이었을 것 같은 객체 ref.val == 100로 다스 려했을 다음 n.val = 100 같이 수정 3.

경우 값 노드를 의미 .

P.

참조와 개체간에 차이가 있습니다. 참조 변수는 객체를 참조합니다. 두 개의 참조가 같은 객체를 참조 할 때 객체의 상태에서 수정 * (일반적으로 . 도트 연산자 사용)이 하나의 참조로 수행되면 같은 객체를 참조하는 다른 참조에 의해 객체 상태가 읽혀지면 동일하게 반영됩니다. 그러나 참조 중 하나가 (할당 연산자 =을 사용하여) 다른 객체를 참조하도록 작성된 경우 다른 참조에 영향을 미치지 않으며 여전히 참조했던 객체를 참조합니다.

* 항상 상태가 작업에 의해 수정되는 것은 아닙니다. String 클래스의 .trim()처럼 String 객체는 변경 불가능합니다. 디버깅을 기억하고 자바 문서는 당신의 가장 큰 도움 도구입니다. 의심의 여지가 스스로 그것을 시도, 당신이 작성하는 코드를 디버깅, 자바 워드 프로세서를 참조하면 부드러운 학습을해야합니다. 행복한 학습, 환호.

관련 문제