quilt code

[Java] 참조 타입 본문

daily/Java

[Java] 참조 타입

김뱅쇼 2022. 12. 28. 20:33

1.데이터 타입 

기본타입(원시타입) 정수 byte, char, short, int, long
실수 float, double
논리 boolean
참조타입
:어디에 뭐가 있다고 참조하는 것. 주소를 가지고 있음
배열  
열거  
클래스  
인터페이스  

기본 타입: int age = 25; / double price = 100.5;

참조 타입 변수: String name = "신용권"; / String hobby="독서";           직접 이름을 가지고 있지 x 객체 주소의 값만 가지고 있음

 

*프로그래밍의 4가지 기초

변수 :선언, 초기화 연산자
제어문 메소드(함수) : 선언, 호출

변수 (데이터) + 메소드(함수) (동작) -> 클래스(객체) : 선언, 생성  -> 추상클래스->인터페이스

 

2. 메모리 사용 영역

스택 Stack 메인 메소드가 만들어지는 곳 
메소드가 호출될 때  정보가 저장되어 있는 공간
힙 Heap 참조타입 new를 통해 생성됨
메소드 Method  

 

class는 new를 하면 heap에 만들어짐  -> heap에 만들어진 주소값을 참조

 

 

-------------------------------------------------<Stack>---------------------------------------------------------

    (p.161 #7 참고)

       ------------- ③confirm47.main <메소드 생성  ---------

run true
balance  
①scanner  
②menu  

------------------------------------------------------------------------------------------------------------------------

 

-------------------------------------------------<Heap>------------------------------------------------------------

ox1324 주소 
scanner 객체

------------------------------------------------------------------------------------------------------------------------

 

객체가 만들어지고 주소값을 참조 타입에 저장 

블록이 끝나면 없어짐 -> 다시 선언 -> 반복하면서 또 생성 -> 값이 담기고 -> 끝나면 -> 또 삭제됨 -> ~ run이 false가 되면 switch가 끝나고 menu가 사라짐 -> while문 종료 -> 출력 -> main method 종료되면 사라짐 (동작할때 스택에 쌓이지만 동작이 끝나면 사라짐)

heap에 있는건 사라지지x 

 

String name = "       ";         의 값
String name2 ; 값 자체가 x
String name3 = null; 참조하고 있지 않다
(heap에 참조하고 있지 않다,
객체를 참조하고 있지 않다)
*스캐너 선언 후 초기화를 하기 위해 아무것도 참조하고 있지 않는다는 개념이 필요해서 null 사용 

*                   :사용불가능 -> 에러발생( null point exception) 참조타입 변수 잘못 사용

참조 변수가 null을 가지고 있을 경우에는 참조 객체가 없으므로 변수를 통해 객체를 사용할 수 없다. -> null 상태에서 있지도 않은 객체의 데이터나 메소드를 사용하는 코드를 실행하면 발생하는 에러 

 

 

String name = new String ("홍길동"); heap에 있는 새로운 홍길동 만듦
  ="홍길동"; heap에 있는지 없는지 검색 후 만듦
있으면 주소값 변환

       참조타입 : 직접 메인 메소드에 저장된 것x heap에 저장되어 있는 주소값을 참조

 

**String의 문자열 비교**

name1 == name 2  XX

name1 .equals (name2

 


 

p.175

 

1.

1) 참조타입에는 배열, 열거, 클래스, 인터페이스가 있다

2) 참조 변수의 메모리 생성 위치는 스택이다

3) 참조 타입에서 ==, != 연산자는 객체 번지를 비교한다

4) 참조 변수는 null 값으로 초기화 할 수 없다 -> null로 초기화 해야함

 

2.

1) 로컬 변수는 스택 영역에 생성되며 실행 블록이 끝나면 소멸된다

2) 상수, 메소드 코드, 생성자 코드는 메소드 영역에 생성된다

3) 참조되지 않는 객체는 프로그램에서 직접 소멸 코드를 작성하는 것이 좋다 -> 일부러 지우지 말아야함

4) 배열 및 객체는 힙 영역에 생성된다

 

3.

1) String은 클래스이므로 참조 타입이다

2) String의 문자열 비교는 ==을 사용한다 -> .equals(  )

3) 동일한 문자열 리터럴을 저장하는 변수는 동일한 String 객체를 참조한다

4) new String("문자열)은 무조건 새로운 String 객체를 생성한다

 

4.

1) 참조 변수에 저장되는 것은 객체의 번지이다

2) 참조 변수에 null을 저장해서 변수를 초기화 시킬 수 있다

3) 참조 변수에 null이 저장된 상태에서는 객체를 사용할 수 없다

4) NullPointException은 초기화되지 않은 참조 변수에서 발생한다 -> x 참조 타입 변수 잘못 사용했을때 발생

 

5.

int var1 = 10;
int var2 = 10;
String var3 = "AB";
String var4 = "AB";
String var5 = new String("AB");

1) var1 == var2  : true

2) var1 != var2 : false

3) var3 == var4 : true

4) var3 != var4 : true

5) var4.equals(var5) :  true

 

'daily > Java' 카테고리의 다른 글

[Java] 조건문과 반복문 과제  (0) 2022.12.29
[Java] 참조타입-배열  (0) 2022.12.29
[Java] 조건문: for, while, do-while  (0) 2022.12.27
[Java] 연산자 예제  (0) 2022.12.26
[Java] 조건문과 반복문  (0) 2022.12.26