반응형
참조 타입
: 객체(object)의 번지를 참조하는 타입을 말한다.
메모리 사용 영역
- Stack 영역
- Heap 영역
위의 그림과 같은 경우 아래의 코드를 사용하여 new를 생성했기 때문에 서로 다른 곳을 바라보는 것이다.
String name1 = new String("신용권");
String name2 = new String("신용권");
+ String 타입의 문자열을 비교할 때는 == 을 사용해서는 안 된다. (== 는 주소값을 비교하는게 된다.)
그대신 equals()를 이용해 문자열을 비교한다.
타입 변수명 = 원본문자열.equals(비교문자열);
원본문자열.equals(비교문자열);
package kr.or.ddit.study05;
import java.util.Scanner;
public class VarExample {
static int i = 100;
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
VarExample obj = new VarExample();
String name1 = "자바"; // String은 객체. 객체의 경우 Heap 영역에 생성이 되고 주소값만 가져옴.
String name2 = "어렵다"; // 모두 완료 후 주소 값만 사라지고, Heap의 글을 삭제 시켜주지 않음.
// jvm이 heap 영역에 있는 글씨인 데이터를 삭제 시켜줌.
obj.method1();
int i1 = 10;
int i2 = 15;
}
public void method1() {
String name1 = "자바"; // main에 name1의 주소 값을 가져옴 >> 효율적으로 메모리 관리할 수 있음.
int i1 = 10; // Stack 영역에 쌓였다가 블록을 끝나는 즉시 사라짐.
int i2 = 15;
}
}
package kr.or.ddit.study05;
import java.util.Scanner;
public class StringExample {
Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
StringExample obj = new StringExample();
obj.process();
}
public void process() {
String str1 = "홍길동";
String str2 = "홍길동";
String str3 = "강감찬";
String str4 = new String("강감찬"); // Heap 영역에 하나 더 생김. str3과의 메모리 주소가 다르게 나옴.
String str5 = new String("강감찬");
System.out.println(str1 == str2);
System.out.println(str3 == str4);
System.out.println(str4 == str5); // class의 경우기에 주소값을 비교함.
System.out.println(str3.equals(str4)); // 값이 같은지 비교함.
Customer c = new Customer();
System.out.println(c);
String s1 = ""; // 아래의 코드와는 다른 뜻임.
String s2 = null; // 객체가 새로 생성되지 않음. or 주소값이 존재하지 않음
// String s2 = "";
// if(s2.equals("") || s2 == null) { // 이 경우 사용이 불가능함.
if(s2 == null || s2.equals("") ) { // if는 앞에가 참일 경우 뒤를 비교하지 않음.
// null 체크는 가장 처음에, 데이터가 비었는지의 여부는 나중에 해야함.
System.out.println("데이터가 비었음");
}
}
}
class Customer {
String name = "강감찬";
}
반응형
'자바' 카테고리의 다른 글
[Java 초급] 10.5.1장 테스트 (0) | 2023.12.11 |
---|---|
[Java 초급] 10장 1차원 배열 및 버블 정렬, 선택 정렬 (0) | 2023.12.11 |
[Java 초급] 8장 반복문 while문, do-while문 (0) | 2023.12.11 |
[Java 초급] 7.5장 테스트 (0) | 2023.12.08 |
[Java 초급] 7장 반복문 for문 (0) | 2023.12.08 |