다음은 예입니다. 즉에서는
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
을 검색 할 수있는 방법이 없습니다.
나는 당신이 의미하는 것이 확실하지 않습니다. 그러나 인스턴스 멤버이거나 정적 멤버 또는 로컬 변수가 아닌 다른 참조는 다른 것을 할당 할 때까지 자동으로 'null'로 초기화됩니다. 매개 변수로 전달하면 매개 변수는 'null'이됩니다. – ajb
무언가가 인스턴스화되지 않으면 기본값으로 초기화됩니다. 불리언 값은 false, 다른 대부분의 primitive는 0, 참조 형은 null. 그래서 네, null을 가리키는 포인터를 전달할 것입니다. –