| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 자동 기록
- rke2-agent
- SSC
- Google Sheet API
- 자바 #JAVA #List #Set #Map #collection #컬렉션
- 노드드레인
- 자동
- 구글시트
- oauth
- 이벤트
- 자바 #JAVA #기본형 #참조형 #primitive #reference
- kubelet
- 노드
- K8s
- googlesheet
- Kubernetes
- 쿠버네티스
- 노드제외
- access token
- 노드삭제
- Today
- Total
이 또한 지나가리
[JAVA Study01] 기본형과 참조형 본문
1. 기본형 타입(primitive type)
- boolean, byte, short, int, long, float, double, char
- 실제 값을 저장하며 stack 메모리에 저장된다.
- int a = 10; 이라고 선언하면 a 안에는 10이라는 값 자체가 저장된다.
- 기본값이 존재하기 때문에 Null 개념이 존재하지 않는다.
2. 참조형 타입(reference type)
- String, 배열, 객체 등 기본형 타입을 제외한 모든 타입
- 객체가 저장된 위치 즉, 주소값을 저장하며 heap 메모리에 저장된다.
- String s = "hello"; 라고 선언하면 s 안에는 "hello" 객체의 주소가 저장된다.
- 빈 객체를 의미하는 Null 개념이 존재한다.
- Interger는 참조형이나 -128 ~ 127 범위의 Integer는 캐싱하여 같은 객체를 사용한다.
Integer a0 = 100;
Integer b0 = 100;
System.out.println(a0 == b0); //true
Integer a1 = 128;
Integer b1 = 128;
System.out.println(a1 == b1); //false
3. 기본형 vs 참조형
- 기본형은 값 복사 시 값 자체가 복사된다.
- 참조형은 주소 값이 복사 된다. 그래서 참조형은 같은 객체는 가리킬 수 있다.
- '==' 는 같은 객체인가?를 비교한다.
- 'equals()'는 논리적으로 같은 값인지? 비교한다. "hello"라는 리터럴과 new String("hello")는 주소는 다를 수 있으나, 논리적인 값은 같기 때문에 '=='로 비교하면 false, equals()로 비교하면 true가 된다.
=> String 리터럴은 보통 String pool에 저장되어 재사용되는데, new String()으로 선언 시 무조건 새 객체가 생성된다.
- 기본형은 빠르고 단순해야하고, 객체는 여러 변수가 같은 객체를 공유할 수 있도록 유연하게 설계되었다.
4. 물리적 값과 논리적 값
- 물리적 값은 메모리 관점으로 실제 저장된 값으로 기본형은 값 자체가 저장되고 객체는 주소가 저장된다.
- 논리적 값은 내용 자체를 의미한다. 예를 들어, String "hello"의 논리적 값은 문자열 내용 자체인 'hello'를 가리킨다.
public static void main(String[] args) {
int a = 10;
int b = a;
a = 99;
System.out.println(b); // 10 (a값 변경에 영향을 받지 않음)
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1; // 주소가 복사됨(같은 배열을 바라 봄)
arr1[0] = 99;
System.out.println(arr2[0]); // 99 (같은 객체를 바라봐 값에 영향 받음)
System.out.println(arr1); // [I@452b3a41
System.out.println(arr2); // [I@452b3a41
System.out.println(s1 == s2); // true (String pool에서 값을 가져옴)
System.out.println(s1 == s3); // false (같은 객체가 아니라 주소값이 다름)
System.out.println(s1.equals(s3)); //true (값을 비교)
}'개발 일만시간의 법칙' 카테고리의 다른 글
| [JAVA Study02] List / Set / Map (0) | 2026.02.22 |
|---|---|
| Codex 사용하기 (0) | 2026.01.25 |
| JDK 환경 변수 세팅(IDE STS 5, JDK25) (1) | 2026.01.05 |
| [10/12] Java 기초 - 김영한의 자바 무료 입문 강의 (0) | 2025.10.12 |