기본형 데이터
- 기본 변수는 실제 값을 저장하고 java 메모리 중 stack에 저장된다.
타입
Integer
- byte, short, int, long
Floating Point
- float, double
Boolean
- boolean
Character
- char
특징
- 산술연산이 가능하다.
- null로 초기화가 안된다.
참조형 데이터
- 참조형 변수는 실제 값이 아닌 저장(참조) 경로가 저장된다.
- 객체는 참조형 데이터이다.
- 모든 객체는 Heap영역에 저장된다.
타입
String, Boolean, Integer
특징
- 산술연산이 안된다.
- null로 초기화 가능하다.
기본형 데이터, 참조형 데이터의 차이 보기
Car.java
main 메서드
자바 프로그램의 메모리 영역인 Stack과 Heap에 어떻게 저장되는지 보면
- 기본 데이터 변수인 discountPrice는 값으로 1000을 가지고 있는데
kia, hyundai의 변수는 값으로 객체가 저장된 경로인 참조 주소를 가지고 있는 차이가 있다.
참조형 데이터 참고
객체를 복사해보자
1) 위 main메서드에서 아래와 같이 Car클래스 변수를 선언하면
- 객체 생성을 하지 않은 상태에의 객체 변수는 null이 들어간다.
자바에서 메모리 저장을 생각해보면 아래와 같을 것이다.
2) carSample에 kia객체를 넣어보면
자바에서 메모리 저장을 생각해보면 아래와 같을 것이다.
- carSample의 값에 kia가 바라보는 객체의 주소가 들어가 둘이 바라보는 객체가 동일해진다.
따라서 참조변수를 복사하면 객체의 참조경로가 복사된다. (객체가 새로 복사되는거 아님)
같은 데이터를 가지고 있는 객체 비교
- 위 경우에 carSample은 kia와 동일한 value를 가지고 있어 아래와 같은 검사를 하면 참으로 나온다.
그럼 carSample을 kia와 동일한 데이터러 새롭게 객체생성을 해도 위와 동일하게 나올까?
main메서드를 아래와 같이 수정해보면
- if가 참이 아니라서 print되지 않는다.
이유
- carSample에서 새롭게 객체 생성을 하면 Heap에서 새롭게 저장된다. (A1) 따라서 carSample의 값은 A1이고 해당 값을 kia와 비교하면 서로 값이 다르다.
'자바' 카테고리의 다른 글
[Java] 래퍼 클래스 (0) | 2024.10.02 |
---|---|
[Java] String (0) | 2024.09.30 |
[Java] 생성자 (0) | 2024.09.27 |
[Java] 캡슐화, 추상화 (5) | 2024.09.26 |
[java]Class, Object, Instance (1) | 2024.09.25 |