JAVA

Equals 메모리 주소비교,값 비교

연93 2022. 9. 6. 09:52
public static void main(String[] args) {

// 데이터타입은 기본데이터타입(값타입)과 참조타입으로 구분된다./
// 구분 : 기억장소를 관리하는 방법이 다르다.

// 1)기본데이터타입(원시타입) 8개 : 값타입(Value Type) . 직접
// byte,short(char),int,long,float,double,boolean
// 값타입으로 기억장소를 생성하는 문법
// 데이터타입 변수명; 예> int a;

// 2)참조타입: 클래스, 열거형, 배열 등 . 간접
// 참조타입으로 기억장소를 생성하는 문법
// 클래스명 변수명 = new 클래스명();

//String 클래스는 2가지 유형으로 변수를 선언할수 가 있다.

//문법1> 값타입 유형
// "홍길동" 문자열 데이터가 저장되어 있을 떄,
// 2번째부터 "홍길동" 데이터는 기존에 저장되어 있는 위치를 재사용/
String strVar1 = "홍길동";
String strVar2 = "홍길동";


//문법2> 참조타입 유형
// "홍길동" 문자열 데이터를 새로 생성해서 관리한다.
String strVar3 = new String("홍길동");

// == 같다.(동일하다). 값을 비교하는 것이 아니라 주소를 비교한다.

// 주소비교
System.out.println(strVar1 == strVar2); // true
System.out.println(strVar1 == strVar3); // false

// 값비교 equals()메서드
System.out.println();
System.out.println(strVar1.equals(strVar2)); //true
System.out.println(strVar1.equals(strVar3)); //true
public class StringEqualsExample {

	public static void main(String[] args) {
		//기본타입
		//스택영역에 int형 기억장소 a가 존재하고 100이 들어있다.
		//int a = 100;

		//참조타입
		//strVar1 변수에 힙영역에 저장되어있는 "홍길동" 문자열데이터의 기억장소 주소가 존재.
		String strVar1 = "홍길동";
		String strVar2 = "홍길동"; // 힙영역에 새로 기억장소를 생성하지 않고, 앞의 홍길동 데이터 주소 사용
		
		//주소비교 실제데이터 비교가 아니다
		if(strVar1 == strVar2) {
			System.out.println("strVar1과strVar2 참조가 같다");
		}else {
			System.out.println("strVar1과strVar2 참조가 다름.");
		}
		
		//값비교
		if(strVar1.equals(strVar2)) {
			System.out.println("strVar1과strVar2는 문자열 데이터가 같음");
		}
		
		//힙영역에 "홍길동" 데이터의 기억장소가 각각 생성된다. 주소가 다르다.
		String strVar3 = new String("홍길동");
		String strVar4 = new String("홍길동");
		
		//주소비교
		if(strVar3 == strVar4) {
			System.out.println("strVar1과strVar2 참조가 같다");
		}else {
			System.out.println("strVar1과strVar2 참조가 다름.");
		}
		
		//값비교
		if(strVar3.equals(strVar4)) {
			System.out.println("strVar1과strVar2는 문자열 데이터가 같음");
		}
	}

}