- 기본타입으로 선언된 변수는 값 자체를 저장함.
1) 정수타입(byte, short, int, long)
2) 실수타입(float, double)
3) 논리타입(boolean)
4) 문자타입(char)
- 객체에 생성된 메모리 번지수를 저장함.
- int와 double로 선언된 변수는 age와 price 값 대입.
- 참조타입인 String클래스로 선언된 변수 name과 hobby에 문자열 대입.
[기본타입변수] int age = 25; double price = 100.5; [참조타입변수] String name = "신용권"; String hobby = "독서";
- 변수들은 모두 스택영역이라는 메모리 영역에 들어감.
- 즉, 기본타입 변수인 age와 price는 직접 값을 저장하고 있지만 참조 타입 변수인 name과 hobby는 힙 메모리 영역의 String객체 번지를 저장하고 String객체 참조.
- 쉽게 말해서 name이라는 데이터 번지수를 스택영역 메모리에 저장하고 실제 들어간 데이터는 힙 영역에 들어간다.
- 자바에서 사용하는 메모리영역.
- 자바 명령어로 JVM을 구동하면 운영체제에서 할당받은 메모리영역을 구분한다.
- 바이트코드 파일을 읽은 내용이 저장되는 영역
- 클래스별로 상수, 정적 필드, 메소드 코드, 생성자 코드 등 저장.
- 객체가 생성되는 영역
- 참조타입 변수에 실제로 들어간 데이터가 저장된다.
- 객체의 번지는 메소드 영역과 스택 영역의 상수와 변수에서 참조.
- 메소드를 호출할때마다 생성되는 프레임이 저장되는 영역.
- 메소드 호출이 종료 후 스택영역에 쌓여 있는 데이터들이 후입선출식으로 제거됨.
- 기본타입 변수의 할당된 값이 스택 영역 메모리에 저장된다.
- ==, != 연산은 변수의 값이 같은지 아닌지 조사
- 번지가 같다면 동일한 객체를 참조. 다르다면 다른 객체 참조
refVar1 == refVar2 // false refVar1 != refVar2 // true refVar2 == refVar3 // true refVar2 != refVar3 // false
- 배열 변수를 참조 타입 변수가 되는 예제.
package com.human.ex; public class Practice { public static void main(String[] args) { int[] arr1; int[] arr2; int[] arr3; arr1 = new int[] {1,2,3}; arr2 = new int[] {1,2,3}; arr3 = arr2; System.out.println(arr1 == arr2); System.out.println(arr2 == arr3); } }