자바

[Java] 기본형, 참조형데이터

juhoyang 2024. 9. 27. 16:33

기본형 데이터

- 기본 변수는 실제 값을 저장하고 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