같은 객체 타입간의 할당 = 주소값 복사

1826 단어 질문질문
InputStream input = System.in;
input.read();
// 위 두줄은 아래 한줄과 같음
System.in.read(); 
  • System 클래스에서 static 변수 in 은 null 로 초기화 되어 있지만, nullPointException 안뜬다.
    -> InputStream 타입의 객체가 생성되어 in 이 할당되어 있다는 뜻
  • 객체(InputStream) 타입인 참조변수를 또다른 참조변수(InputStream 타입)에 할당
    = 주소값 복사 = 두개의 참조변수가 하나의 객체 참조(바라본다, 가르킨다)


+
1. 변수의 데이터 타입의 기본형이면 실제 데이터가 들어있고, 기본형이 아니면 참조값이 들어있다.
2. new 연산자는 객체의 메모리를 생성한다.
c++ 의 객체 변수는 주소 그 자체를 할당 받고, 주소를 저장하기 위한 포인터 변수를 이용해 주소를 관리하므로 사용자가 직접 주소를 핸들링 할 수 있다.
3. 그러나 자바는 객체의 주소가 아닌 참조값(정수값)을 할당 받는다.
그렇기 때문에 자바의 객체변수를 참조변수라 부른다 .
4. 다시 말하면, 자바에서 객체를 만들면 자바를 실행시키는 시스템 내에서 객체의 주소에 연결된 숫자를 할당받고, 이 숫자(참조값)을 이용해 해당 객체의 메모리에 값을 할당하거나 메소드를 호출하는 것이 가능하게 한다.
5. 참조변수간의 할당
새로운 메모리가 생성되지 않고, 하나의 메모리를 두 참조변수가 가리킨다.
참조값끼리 아무리 복사해도 객체내부의 메모리까지 복사되지 않는다.
이러한 이유에서 자바에서는 값에 의한 호출만 가능하다.
그래서 clone 이라는 기법을 이용해 연결된 메모리까지 복사하는 기법이 있다.

좋은 웹페이지 즐겨찾기