안녕하세요 오늘은 Java의 String문자열을 이용해서
equals()와 ==의 차이를 알아보겠습니다.
이 둘을 알기 전 메모리 관점에서 봐야하는데요
먼저 하나의 예시를 들어보겠습니다.
String을 생성하는 방법은 2가지가 있습니다.
String str1 = "sujin"; String str2 = new String("sujin"); System.out.println(str1); // result : sujin System.out.println(str2); // result : sujin
코드를 보시면 각각의 생성 방식이 다릅니다.
String str1 = "sujin";
위 구문의 경우 Heap내부의 String constant pool이란 곳에 저장을 합니다.
만약 이미 존재하는 문자열이 있으면 이미 저장된 인덱스의 번호를 가리키게 되어있습니다.
String str2 = new String("sujin");
다음 위 구문은 말 그대로 객체를 생성합니다.
Heap내부의 레퍼런스 주소를 가지고 있습니다.
String str1 = "sujin"; String str2 = "sujin"; String str3 = new String("sujin"); String str4 = new String("sujin"); System.out.println(str1 == str2); // result : true System.out.println(str1 == str3); // result : false System.out.println(str3 == str4); // result : false System.out.println(str1.equals(str3)); // result : true
위 설명을 듣고 보니 이 소스가 이해가 되시나요?
==은 객체의 주소값을 비교하고 equals()는 객체의 값을 비교합니다.
이 것으로 조건문을 사용할 때 어떤 것을 사용해야 할지 더 명확하게 작성할 수 있습니다.
'Java > java' 카테고리의 다른 글
객체지향 프로그래밍이란? (Object Oriented Programming) (0) | 2018.06.27 |
---|