2013-05-12 2 views

답변

17

내가 제대로이 대답 할 수있는 우아함을 가지고 있지만 확실하지 않다 ...

  • 객체가 클래스의 인스턴스, 그것은
  • 참조는 메모리에 일부 저장되는 위치 Object가 상주하는 메모리 위치에 대한 포인터를 설명하는 데 사용됩니다.
  • 변수는 응용 프로그램 내에서 해당 메모리 위치에 액세스 할 수있는 수단입니다 (이 값은 "variable"입니다). 변수는 (그 null가 아닌 경우) 단일 메모리 주소를 가리 수 있지만, 응용 프로그램
0

예 객체 참조는 실제 객체 자바

0

모든 개체 인스턴스

Object o = "foo"; 위의 예에 대한 참조가

참조로 지칭된다의 메모리 위치를 보유하는 변수이며 o를 객체 "foo"에 보냅니다.

8

객체 참조 변수가 자바 란의 라이프 사이클 지적 다른 위치에를 통해 변경 할 수있다?

단순히 유형이 객체 유형 인 변수입니다. 즉 java.lang.Object이거나 서브 유형이 java.lang.Object 인 유형입니다.

참조 변수에 개체의 메모리 주소가 있습니까?

아마도 예, 그렇지만 가능하지 않을 수 있습니다.

JVM이 객체 참조를 나타내는 방법에 따라 다릅니다. 대부분의 JVM에서 객체 참조 은 메모리 주소 또는 포인터를 사용하여 장면 뒤에서 표현 된입니다. 그러나 을 배열의 인덱스로 표현할 수도 있습니다. (사실, 내가 객체 참조가 실제로 포인터의 배열에 대한 인덱스이었다 실험 JVM 주변에 엉망했습니다.)

요점은 자바 객체 참조는 설계-숨기기 인 추상화 것을 표현/구현 세부 사항. 실제 표현은 당신을 걱정하지 않아야합니다 ... 당신이 순수한 자바로 프로그램한다면 그것은 중요하지 않습니다. 순수 자바로 실제 메모리 주소를 잡을 수는 없다. 좋은 일이다. JVM (특히 가비지 수집기)은 말하지 않고 객체의 실제 메모리 주소를 변경해야합니다. 응용 프로그램이 객체 주소를 얻고 사용할 수 있다면이를 처리해야하며 근본적으로 어려운 문제입니다.

+0

이것은 멋지고 깨끗합니다 –

+0

그래서 참조 변수의 유형이 객체 유형 또는 그 하위 클래스 인 경우 s1이 "String s1 = new String ("string ");"의 객체라고 말할 수 있습니까? 더 나아가이 코드는 메모리에 "string"을위한 두 개의 객체 s1과 객체를 생성 할 것인가? – Dexter

+0

1) 엄격히 아니요. 's1'은 변수입니다. 's1' *에는 객체 참조가 포함되어 있습니다. 2) 아니요. 왜냐하면's1'은 객체가 아니기 때문입니다. 1) –

1

Object Reference 변수는 정확히 포인터가 아닌 c의 포인터와 같습니다.
JRE는 JRE를 마치 포인터처럼 취급하고 JRE를 포인터에 대한 포인터로 취급합니다.
이므로 refernce variable just define a way to reach your object입니다. Java는 플랫폼에 독립적 인 언어이므로 메모리 관리가 각기 다른 장치에서 다르므로 고유 한 방법으로 객체에 접근하기가 어렵습니다.