2014-11-18 3 views
1

다음은 내가 말하는 의미의 예입니다.Java : 인스턴스화되지 않은 객체 참조를 전달하는 방법은 무엇입니까?

노드를 받아들이는 이진 트리 삽입 방법이 있고 parent.child (인스턴스가 생성되지 않음)를 전달하면 정확히 전달되는 대상은 무엇입니까?

Java는 값으로 전달되기 때문에 참조 사본을 전달해야하지만 어떤 객체도 사용하지 않으면 어떤 일이 발생 하는지를 가리켜 야합니다. 부모 노드와 관련이없는 빈 참조를 전달한다는 의미입니까?

사실 불행히도 이것은 실제로 전달 된 질문 이었기 때문에 코드가 없습니다. 내 솔루션은 이미 인스턴스화 된 부모 노드를 전달한 다음 parent.child 인스턴스를 생성하는 것입니다.

+0

나는 당신이 의미하는 것이 확실하지 않습니다. 그러나 인스턴스 멤버이거나 정적 멤버 또는 로컬 변수가 아닌 다른 참조는 다른 것을 할당 할 때까지 자동으로 'null'로 초기화됩니다. 매개 변수로 전달하면 매개 변수는 'null'이됩니다. – ajb

+0

무언가가 인스턴스화되지 않으면 기본값으로 초기화됩니다. 불리언 값은 false, 다른 대부분의 primitive는 0, 참조 형은 null. 그래서 네, null을 가리키는 포인터를 전달할 것입니다. –

답변

0

다음은 예입니다. 즉에서는

0x1000: Start of Node Object 
0x1004: 0x0000 (child field offset) 
... 
0x6000: 0x1000 (parent variable) 

있다 0000, 어딘가에 메모리 (YMMV)를 말한다, 특별한 값이 null 가정, 유형 그래서

class Node { 
    Node child; 
} 

Node parent = new Node(); 
// here, parent.child == null 

을 고려하는 Node 객체는 child와, 거기에 필드에 null을 값으로 저장합니다. 또한 Node 개체의 값 (정렬 주소)을 저장하는 변수 parent이 있습니다.

당신은, 따라서 해당 주소, 0x1000을 받고, parent를 역 참조하는 그 child 필드, 0x1004 오프셋 파악하고, 그 가치, 0x0000을 받고있어 당신이

public void insert(Node node) {/* implementation */} 
... 
tree.insert(parent.child); 

을 수행 할 때. 그 값을 스택에 복사합니다. 메서드 호출은 스택에서 해당 값을 팝핑하고이 새로운 node 변수에 바인딩합니다. 그래서 지금 당신은 귀하의 질문에 내가 부모 노드에 관련이 없으며, 빈 참조를 전달하고있어 의미

합니까 답변하기

0x1000: Start of Node Object 
0x1004: 0x0000 (child field offset) // null 
... 
0x6000: 0x1000 (parent variable) 
... 
0x8000: 0x0000 (node variable) // null 

가 있나요?

null 참조를 전달 중입니다. 바인드 된 매개 변수에서 참조하는 것이 무엇이든 parent을 검색 할 수있는 방법이 없습니다.