Java는 항상 변수의 값을 복사해서 대입한다.
✏️기본형 vs 참조형
- 기본형
- int, long, double, boolen
- 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
- 값을 그대로 사용할 수 있다.
- 연산이 가능하다.
- 기본형을 새로 정의할 수 없다.
- 참조형
- 객체 또는 배열
- 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입
- 참조값을 그대로 사용할 수 없다.
- 연산이 불가능하다.
- 참조형인 클래스만 직접 정의할 수 있다.
💡String은 클래스이다. 하지만 문자 값을 바로 대입할 수 있다.
✏️변수 대입
기본형인 경우 변수에 들어있는 실제 사용하는 값을 복사해서 대입하고,
참조형인 경우 변수에 들어 있는 참조값(객체의 주소)을 복사해서 대입한다.
💡즉, 항상 변수의 값을 복사해서 대입한다.
✏️메서드 호출
메서드를 호출할 때 사용하는 매개변수도 변수이다.
메서드를 호출할 때 매개변수에 값을 전달하는 것도 값을 복사해서 전달한다.
-
기본형
- 메서드로 기본형 데이터를 전달하면, 해당 값이 복사되어 전달된다.
- 메서드 내부에서 매개변수의 값을 변경해도, 호출자의 변수 값에는 영향이 없다.
-
참조형
- 메서드로 참조형 데이터를 전달하면, 참조값이 복사되어 전달된다.
- 메서드 내부에서 매개변수로 전달된 객체의 멤버 변수를 변경하면, 호출자의 객체도 변경된다.
✏️변수와 초기화
- 변수의 종류
- 멤버 변수(필드) : 클래스에 선언
- 지역 변수 : 메서드에 선언
- 변수의 값 초기화
- 멤버 변수
- 자동 초기화
- 인스턴스의 멤버 변수는 인스턴스를 생성할 때 자동으로 초기화 된다.
- int = 0, boolean = false, 참조형 = null
- 초기값을 직접 지정할 수 있다.
- 지역 변수
✏️null
- null은 값이 존재하지 않는, 없다는 뜻이다.
- 아직 가리키는 대상이 없거나, 가리키는 대상을 나중에 입력하고 싶을 때 null 값을 넣어둘 수 있다.
✏️NullPointerException
- null을 가리킬 때 발생하는 예외이다.
- 찾아갈 수 있는 객체(인스턴스)가 없다는 것이다. 즉, null 값은 참조할 주소가 존재하지 않는다는 뜻이다.
- 객체를 참조할 때 .(dot)을 사용하는데, null에 .(dot)을 찍었을 때 발생한다.
참고자료