본문 바로가기
WhiteShip Study

2. 자바 데이터 타입, 변수 그리고 배열

by 이석준석이 2020. 12. 11.

1. 프리미티브 타입 종류와 값의 범위 그리고 기본값

 

  • 자바에 존재하는 프리미티브 타입은 아래와 같다.
  종류 범위 Memory 기본값
논리형 boolean true / false  1byte false
정수형 byte -128 ~ 127 1byte 0
short -32768 ~ 32767 2byte 0
int -2,147,483,648 ~ 2,147,483,647 4byte 0
long -9,223,372,036,854,775,808 ~ 
9,223,372,036,854,775,807
8byte 0L
실수형 float 1.175494351 E - 38 ~
3.402823466 E + 38
4byte 0.0F
double 2.2250738585072014 E - 308 ~
1.7976931348623158 E + 308
8byte 0.0
문자형 char 0 ~ 65,535 2byte '\u0000'

 

  • 실제로 출력해보자.
static boolean boolean_default;
static byte byte_default;
static short short_default;
static int int_default;
static long long_default;
static float float_default;
static double double_defualt;
static char char_default;

public static void main(String[] args) {
    System.out.println("boolean default : " + boolean_default);
    System.out.println("byte default : " + byte_default);
    System.out.println("short default : " + short_default);
    System.out.println("int default : " + int_default);
    System.out.println("long default : " + long_default);
    System.out.println("float default : " + float_default);
    System.out.println("double default : " + double_defualt);
    System.out.println("char default : " + char_default);
    System.out.println("char default : " + '\u0000');
}
boolean default : false
byte default : 0
short default : 0
int default : 0
long default : 0
float default : 0.0
double default : 0.0
char default : 
char default : 

2. 프리미티브 타입과 레퍼런스 타입

 

  • Reference (참조) 라는 뜻을 갖고있다.
  • 실제 값이 들어있는 곳 (Heap) 에 대한 주소를 갖고있다는 뜻이다.
    • 그림과 코드로 살펴보자.
  • 최상위 클래스는 모두 Object이다.

예시 1)

public static void main(String[] args) {
    Integer num2 = 10101;
    int num = 100;
}

 

  • 위의 코드를 아래의 그림으로 설명해보면
    • Integer num2 = 10101;
      • Heap에 10101 이 들어있는 Integer 형태의 인스턴스를 생성한 뒤
      • 스택 내에서 메모리공간을 할당한 후에, 10101 이 저장된 Heap 의 주소인 0x12345678 을 저장한다.
    • int num = 100;
      • 스택 내에서 메모리공간을 할당한 뒤, 100을 저장한다.

  • Primitive 형식은 모두 위의 그림처럼 stack 메모리 공간에 값을 바로 할당하며
  • 그 이외의 형식 (Reference 형식) 은 Heap 에 할당한다.

예시 2)

public static void main(String[] args) {
    Integer num2 = 10101;
    Integer num3 = 10101;
    System.out.println(num2 == num3); // false
    System.out.println(num2.getIntValue() == num3.getIntValue()) // true
}
  • num2 == num3 [false]
    • Integer num2 와 Integer num3 는 같은 값이 들어있는 어느 주소를 가리키고 있을 테지만
    • 둘이 가리키는 주소의 값은 다르기 때문이다. (0x12345678 != 0x56781234)
  • num2.getIntValue() == num3.getIntValue() [true]
    • 값을 비교하려면 .getIntValue() 를 수행해, 주소에 있는 값을 꺼내와서 비교해야 한다.


Object 클래스가 최상위인지 확인해보자.

  • Integer 의 부모 클래스 확인하기
public static void main(String[] args) {
    Class<?> type = Integer.class;
    while(type.getSuperclass() != null) {
        System.out.println(type.getSuperclass().getName());
        type = type.getSuperclass();
    }
}
결과
java.lang.Number
java.lang.Object
  • Primitive type 을 제외한 모든 클래스들은 결국에는 Object 를 출력할 것이다.