[Java] 자바변수 초기화

동쪽에서만나다·2022년 11월 17일

JAVA

목록 보기
1/1
post-thumbnail

자바를 공부하며 작성한 내용입니다. 정확하지 않은 내용이 있을 수 있습니다.


자바 기본형 타입을 초기화 하지않으면 어떤 값이 나올까?

궁금해서 한번 인텔리제이를 활용해서 코드를 짜봤다.
코드를 짜며 알 수 있던 사실 몇 가지가 있었다.

  • 필드변수는 클래스 기반이므로 Heap메모리에 저장되고 지역변수는 메서드 기반이기 때문에 Stack 메모리에 저장된다.
  • 또한, 지역변수는 초기화를 안하면 예외가 발생한다.

이로부터 추론해볼 수 있는 또 다른 사실은

  • 힙메모리에 저장되는 필드변수는 자동으로 초기화를 해준다.
  • 하지만, 메서드 기반 스택메모리 내 지역변수는 초기화를 해주지 않는다.
  • 이유는? 종료시 메모리에서 사라지기 때문에
    -> (누가 해주는지는 메모리 구조와 세부작동 방식에 대해 조금 더 알아볼 필요가 있다.)

인텔리제이 상 코드결과

전역변수로 기본형타입을 나열하고 main메서드 내부에서 Main클래스 인스턴스 t를 바탕으로 출력을 해봤다.

public class Main {
    byte aByte;
    short aShort;
    int anInt;
    long aLong;
    char aChar;
    float aFloat;
    double aDouble;
    boolean aBoolean;
    String string;
    public static void main(String[] args) {
        Main t = new Main();
        System.out.println("byte 초기값 = " + t.aByte);
        System.out.println("short 초기값 = " + t.aShort);
        System.out.println("int 초기값 = " + t.anInt);
        System.out.println("long 초기값 = " + t.aLong);
        System.out.println("char 초기값 = " + t.aChar);
        System.out.println("float 초기값 = " + t.aFloat);
        System.out.println("double 초기값 = " + t.aDouble);
        System.out.println("boolean 초기값 = " + t.aBoolean);
        System.out.println("String 초기값 = " + t.string);
    }
}

결과는 다음과 같다.

char의 초기값은 박스모양같은게 나왔는데 \u0000 즉, 숫자 0에 해당하는 기호이다.

public class Main {
    public static void main(String[] args) {
        char test = 0;
        char initialValue = '\u0000';
        System.out.println("\\u0000 is equal to number zero? " + (test == '\u0000'));
        System.out.println(initialValue);
    }
}

결론

숫자와 관련된 정수,실수형타입은 모두 0으로 초기화 되며, 문자형'\u0000', 논리형(boolean)false가 초기값이다.

더 찾아보아야 할 것

힙메모리와 스택메모리 구조에 대해 조금 더 공부해 볼 필요가 있다.

Reference

자바(Java)필드와 변수의 선언위치와 초기값(전역변수,지역변수): https://hunit.tistory.com/154
사진출처 : https://www.wallpaperflare.com/pulsar-hd-wallpaper-big-bang-explosion-space-night-star-space-wallpaper-prmib

profile
아수라발발타

0개의 댓글