2011-04-24 2 views
1

: arrayOfObjects[validIndex]의 새로운 콘텐츠가 종료, 또는 원래 oldObject을하지받을 않습니다 배열의 요소가 개체에 대한 참조 또는 참조 자체입니까? 내가 AnObjects의 배열을 가지고 있고 내가 이렇게하면

AnObject oldObject = arrayOfObjects[validIndex]; 
arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction); 
oldObject.terminate(); 

종료 얻을?

즉, oldObject에 AnObject에 대한 참조가 포함되어 있거나 AnObject에 대한 참조가 포함되어 있습니까?

답변

3

이 코드는 다소 혼란 스럽습니다. 개체 배열에 AnObject에 대한 참조가 있어야합니다.

AnObject oldObject = arrayOfObjects[validIndex]; 

여기서 참조 번호는 oldObject으로 지정합니다.

arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction); 

이제 AnObject의 새로운 인스턴스를 가리 키도록 validIndex의 배열 참조를 설정합니다. 더 이상 oldObject을 가리 키지 않습니다.

oldObject.terminate(); 

힙에있는 개체에 대한 참조입니다.

oldObject은 힙의 인스턴스를 참조합니다. 배열의 참조는 힙에 작성한 새 인스턴스를 가리 킵니다.

oldObject이 종료되면 (그 의미가 무엇이든) 작성한 새 인스턴스에는 중요하지 않습니다. 배열은 여전히 ​​새 인스턴스를 가리 킵니다.

+0

미안하다. 이름 짓기가 내 프로젝트와 맥락을 같이한다. 기본적으로 어떤 메소드 호출이 될 수 있지만, 새 인스턴스에서 메소드 호출이 호출된다. 나는 그 권리를 얻었 느냐? – Samuel

+0

아니요, 종료가 정적이 아니라면 인스턴스에서 호출됩니다 (예제의 경우 oldObject). 배열 참조를 가리키는 새 인스턴스가 아닙니다. – duffymo

1

개체에 대한 참조를 포함합니다. 이 경우 oldObject가 종료됩니다. 배열에 배치 한 새 인스턴스가 아닙니다.

0

Java에는 참조가 없습니다. 기본 유형을 무시하면 모든 변수/배열 셀이 객체에 대한 참조를 보유합니다. 다음은이 도시 한 조각이있다 : arrayOfObjects가 100

  • 가 validIndex이라고 가정 메모리 위치에서 시작하도록

    class Something { 
        public int n; 
    }  
    
    Something[] arr = new Something[2]; 
    Something s = new Something(); 
    s.n = 2; 
    
    arr[0] = s; 
    System.out.print(arr[0].n); // Output: "2" 
    arr[0].n += 1; 
    System.out.print(s.n); // Output: "3" 
    
  • 1
    • 가정 0

    나서 arrayOfObjects [validIndex] 메모리 위치를 의미 100.

    • 아수 그 메모리 위치 100은 값이 200입니다.

      AnObject oldObject = arrayOfObjects [validIndex];

    oldObject는

    arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction); 
    
    • 200

      새로운 호출이 오브젝트 메모리 위치 (300)를 할당한다고 가정 메모리 위치에있다.여전히, 200

      그래서 메모리 위치에 있어야하는 데 사용되는 항목을 가리키는 있도록

    그런 다음 메모리 위치 (100)는 변경되지 않는다 (300)

    oldObject.terminate(); 
    

    oldObject의 값이 배열의 새 객체는 새 객체로 대체 된 후 종료됩니다.

    +0

    고맙습니다. 매우 명확한 – Samuel

    관련 문제