cornarong
85
2021-07-02 16:01:41
3
364

자바 주소값 기초적인 질문하나 해도 될까요?


알고리즘을 공부하다가 궁금한게 생겼는데요.

int a = 3;
int b = 5;

주소값은

a = 6276ae34

b = 7946e1f4

이렇게 나옵니다.

근데 여기서 a = b 이렇게 해주면

1. a의 주소값이 b의 주소값을 참조하게 되는게 맞나요? 그럼 a의 주소값은 사라지게 되나요?

2. 또 b = b++; 과 b = b+1; 이 주소값이 달라지는데 전자는 기존 b의 주소값을 따라가고 후자는 새로운 주소값이 생기는데 무슨 차이인걸까요..?

너무 기초적인 질문이라 죄송합니다ㅠㅠ

0
  • 답변 3

  • 신히
    958
    2021-07-02 16:50:44 작성 2021-07-02 16:50:57 수정됨

    자바에서 변수의 주소를 어떻게 가져오셨나요? 자바에서는 포인터 접근을 지원하지 않기 때문에 일반적인 방법으로 주소를 알 수 없습니다.

    int 자료형은 value 값이므로 a = b 이렇게 주소를 바꿀 수 없습니다(Integer 클래스 등은 참조변경 가능)


    만일 b가 인스턴스라고 가정하면, a = b 라고 했을 때 a가 가르키는 참조는 사라지게 됩니다.

  • 퀘이사123
    834
    2021-07-02 16:51:49

    기본형에도 주소값이 있는건 처음알앗네요.


    일단 주소값이있는 레퍼런스형으로 생각하고 답변을 드리자면

    1. a는 b의 주소값을 참조하게 되고, 기존 a의 주소값은 참조를 잃게 되고 메모리에 남아있다가 가비지컬렉터에 의해 정리됩니다.


    2. b++ 과 b+1의 차이는 b++는 일단 b의 값으로 계산이 된 후 1이 증가하는거고, b+1은 즉각적으로 증가합니다. b+1과 같은건 ++b죠

    그러니까 b=b++면 이때의 b는 그냥 b가 되고 b = b+1 이면 b는 이때의 b는 1증가된상태가됩니다. 

  • cornarong
    85
    2021-07-02 18:01:39 작성 2021-07-02 18:02:06 수정됨

    아 정말 감사합니다.

    질문에 혼란을 드려서 죄송합니다.

    주소값을 어떻게 구했냐고 물어보셨는데 저는 System.identityHashCode(int변수명) 이 메소드를 사용해서 a 또는 b의 해쉬코드를 구해서 주소값 처럼 활용했네요

    해쉬값이 객체마다 다르니까 주소값이 다른것 처럼 .. 같은 용도로 비교해서 사용하였는데

    혹시 객체의 해쉬코드가 객체의 주소값 처럼 유니크한 값이 아닌가요?

    공부가 많이 필요한 것 같습니다..ㅠㅠ

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