TIL/myself

TIL(Today I Learned) 20220420 자바 참조타입과 참조 변수

토희 2022. 4. 20. 14:41
728x90

https://youtu.be/UOaK4TDkaww

참조타입: 객체의 번지를 참조하는 타입, 배열, 열거, 클래스, 인터페이스

기본타입은 선언되면 메모리 스택영역에 저장,

참조타입(String) 변수는 힙영역에 객체 생성, 스택영역에는 번지가 저장됨

메모리 사용영역

메소드 영역: 클래스 별로, 정적필드, 상수, 생성자, 메소드 코드 등을 분류해 저장

힙 영역: 객체와 배열이 생성되는 영역

JVM스택 영역: 매소드를 호출할때마다 프레임 추가되고, 메소드가 종료되면 해당 프레임 제거

참조 타입 변수는 스택영역에 힙영역에 생성된 객체의 주소 가짐

 

참조 타입 변수 간의 ==, != 연산

동일 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 떄 사용

번지 값의 비교, 참조하는 객체가 같은지

 

참조타입 젼수는 객체를 참조하지 않는다는 뜻으로 null 값 가질수 있음

null로 초기화된 참조 변수도 스택영역에 생성

 

NullpointException

Error: 하드웨어, OS 문제로 발생

Exception: 실행하는 도중 발생

-참조 타입 변수가 null 상태에서 존재하지 않는 객체의 데이터나 메소드 사용할 경우 발생

-해당 참조 변수가 객체를 참조하도록 수정하여 해결

 

https://youtu.be/SrDFN_7_sWw

문자열 리터럴 동일한 경우 같은 String 객체를 공유

 

new 연산자

힙 영역에 새로운 String 객체를 생성, 문자열이 같더라도

 

문자열 리터럴과 new 연산자로 생성된 객체 비교

String name1 = "홍길동";
String name2 = "홍길동";
String name3 = new String("홍길동");

name1 == name2     true

name1 == name3.    false

== 번지 비교 X

equals() 문자열 비교

 

String 변수 초기값으로 null 대입: String 변수가 참조하는 객체가 없음을 의미

String hobby = "여행";
hobby = null;

참조를 잃은 String 객체는 쓰레기 수집기 (Garbage Collector) 통해 메모리 자동 제거, 따라서 자바는 개발자가 따로 메모리 정리

안해도 됨

 

728x90