일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- servlet
- Android
- FastAPI
- jsp
- html
- Homebrew
- Error
- nodejs
- 자바문제
- 맥
- Oracle
- Java
- Mac
- 컬렉션프레임워크
- API
- JDBC
- 단축키
- 자바
- 배열
- crud
- python
- ddit
- pyqt
- ibatis
- 생활코딩
- 대덕인재개발원
- 객체지향
- 이클립스
- 반복문
- spring
Archives
- Today
- Total
romworld
Chapter 05-1. 참조 타입과 참조 변수 본문
참조타입
자바의 타입은 크게 기본타입과 참조타입으로 분류된다.
- 기본타입 : int, double, char, float, long, byte, short
- 참조타입 : 배열타입, 열거타입, 클래스, 인터페이스
(참조 타입의 변수에는 객체의 번지가 저장
번지로 객체를 참조한다는 의미에서 참조 타입이라고 함)
- 기본타입은 변수의 값을 실제 변수안에 저장하지만,
- 참조타입은 값이 저장된 주소를 저장함 (대명사)
메모리 사용 영역
JVM은 운영체제에서 할당받은 메모리 영역을 메소드 영역, 힙 영역, 스택 영역으로 구분해서 사용한다.
메소드 영역에서는 정적 필드, 상수, 메소드 코드, 생성자 코드가 위치하며, 힙 영역에는 객체가 생성된다.
스택 영역에는 변수가 생성됨.
번지 비교
비교 연산자(==, !=)가 기본 타입에서 사용되면 값을 비교하지만, 참조 타입에서 사용되면 번지를 비교한다.
==이 true가 나오면 같은 객체를 참조하고 false가 나오면 다른 객체를 참조한다는 뜻
(문자열 비교는 equals()메소드 사용)
null
객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있다
NullPointerException
참조 변수가 null을 가지고 있을 경우에는, 참조 객체가 없으므로 참조 변수를 통해 객체를 사용할 수 없다.
만약 null인 참조 변수를 통해 있지도 않은 객체의 필드나 메소드를 사용하면 발생된다.
// 기본타입 (소문자로 시작)
int age = 20; //현금으로 20 가지고 있는 거고
double pi = 3.14;
// 참조타입 (대문자로 시작)
String name = "홍길동"; //통장에 가지고 있는 거 String name = new String("홍길동");
String type = "java";
기본타입 변수 테스트
int a1 = 0;
int a2 = a1;
System.out.println(a2);
a1 += 1;
System.out.println(a2);
- a2를 출력했기 때문에 0이 출력된다.
참조타입 변수 테스트
// Scanner, Random
ReferenceTest rt1 = new ReferenceTest();
// ReferenceTest 클래스로 하나의 객체(참조형변수)를 만든다.
ReferenceTest rt2 = rt1;
// 위에서 만든 참조형 변수를 다른 이름의 참조형 변수에 넣어준다.
System.out.println(rt1); //d_array.ReferenceTest@15db9742
System.out.println(rt2); //d_array.ReferenceTest@15db9742
// 두 참조형 변수의 주소값이 같은지 확인한다.
System.out.println(rt2.i);
// rt2안에 있는 int형 i의 값을 확인한다.
rt1.i += 1;
//rt1 안에 있는 int형 i의 값을 1증가시킨다.
System.out.println(rt2.i);
// rt2안에 있는 i의 값을 확인한다.
// rt1과 rt2는 같은 객체를 바라보기때문에 rt1의 값이 바뀌면
// rt2도 값이 바뀐것 처럼 보인다.
// 참조형변수는 주소를 가지고있지 않다는 의미로 null 값을 가질 수 있다.
String str1 = null;
System.out.println(str1);
// "문자열".length() : 문자열의 길이를 구하는 메서드
System.out.println(name.length());
str1 = new String ("이순신");
System.out.println(str1.length());
'JAVA > 개념정리' 카테고리의 다른 글
Chapter 05-3. 정렬, 석차 구하기 (0) | 2022.09.19 |
---|---|
Chapter 05-2. 배열 (0) | 2022.09.14 |
Chapter 04. 조건문과 반복문 (3) | 2022.09.12 |
Chapter 03. 연산자 (0) | 2022.09.10 |
Chapter 02. 변수 (0) | 2022.09.09 |
Comments