왕초보파이썬
64
2020-12-07 15:47:13 작성 2020-12-07 15:56:17 수정됨
6
243

java 참조변수 null에대해


배열과 String둘다 참조변수라고 배웠습니다. 그런데 문제는

String str을 null로 초기화 해주고 str에 값을 줄때는 오류가 발생하지않는데

배열 Arr을 null로 초기화 해주고  Arr[0]에 값을 줄때는 NullPointerException오류가 발생합니다.

왜 그런지 이유를 알 수 있을까요??

int[] Arr = null;

이 부분을 쓰고 그대로 Arr에 값을 넣을 수 없을 까요??

public class Main {
    public static void main(String[] args) {
       
        String str = null;
        str = "4";
        System.out.println(str);

        int[] Arr = null;
        Arr[0] = 10;
        System.out.println(10);
    }
}


0
  • 답변 6

  • 친슈
    271
    2020-12-07 16:09:06

    자바 배열은 처음 선언한 길이로 고정이 되기 때문에 그렇습니다.


    https://ifuwanna.tistory.com/231

  • 왕초보파이썬
    64
    2020-12-07 16:13:27 작성 2020-12-07 16:14:48 수정됨

    친슈 제가 궁금한것은 

    int[] arr = null; 

    배열을 null로 초기화를 하고 다시 배열에 객체를 할당하는 방법입니다.

    근데 처음 선언한 길이로 고정되면

    null로 처음 선언하면 고정되어서 못바꾸는 건가요??

  • basscraft
    3k
    2020-12-07 16:18:22

    메모리가 할당되었는지 아닌지 차이라고 생각하시면 됩니다.

    스트링 변수를 문자열로 초기화 하는 것은 문자열의 메모리 주소를 할당하는 것이고

    배열의 경우는 초기화 하지 않으면 메모리가 할당이 되지 않은 상태라고 보시면 맞을꺼예요.

  • 친슈
    271
    2020-12-07 16:24:07

    int 배열을 null로 처음 선언하게 되면 메모리에 참조 자체가 null입니다.

    자바에서 배열은 고정길이이기 때문에 처음 배열 사이즈를 1로 잡으면 배열에 1개의 값만

    2개로 잡으면 2개의 값이 들어가게 되죠.

    위에 참조 돼있는 사이트에 읽어보시면 아시겠지만 최초 고정을 하였더라도

    다시 초기화하여 새로운 배열길이를 만드는건 됩니다.

    대신 자바배열은 고정길이라는걸 항상 염두에 두시고 코딩을 하셔야겠죠

    -1
  • 왕초보파이썬
    64
    2020-12-07 16:30:21
    친슈 최초고정을 null로 하고 다시초기화하여 새로운 배열길이를 만드는건 안되는 것 같습니다.
  • 왕초보파이썬
    64
    2020-12-07 21:21:37 작성 2020-12-07 21:21:49 수정됨

    친슈 님 죄송해요 null로 하고 다시초기화 하면 되군요... 감사합니다

  • 로그인을 하시면 답변을 등록할 수 있습니다.