아마 자바를 접한지 얼마 안되었다면 ==연산자가 값이 같은지 비교하는 연산자로 알고 있을 수도 있다.
특별한 상황을 제외하고 결과값이 거의 그렇게 나오기 때문이다.
하지만, 정확히 말하면 == 연산자는 메모리 참조 주소를 비교하는 연산자이다.
equals()가 값을 비교하는 함수이다.
예를 들면, 아래 코드의 결과값을 예상해보자.
String a = "apple";
String b = "apple";
String c = new String("apple");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(a.equals(c));
System.out.println(b.equals(c));
답 확인
더보기
true
false
true
true
왜 ==을 사용하면 a와 c가 같지 않다고 나올까?
코드 순서를 따라가며 이해해보자.
1. String a = "apple";에서 apple이라는 문자열이 string constant pool(문자열 상수 풀)이라는 곳에 저장된다.
2. String b = "apple";이 선언되었을 때 메모리는 새로운 공간에 apple을 저장하는 것이 아니라, 이미 apple이 저장되어 있는 메모리의 주소값을 참조하게 된다. 메모리를 절약할 수 있기 때문이다.
3. String c = new String("apple"); 에서 new 연산자로 객체를 생성후에 문자열을 저장하게 해두면 위 그림과 같이 string constant pool에 저장되는 것이 아닌 다른 메모리 공간에 문자열이 새롭게 저장되게 된다.
따라서, a==b는 같은 메모리 주소값을 참조하고 있기에 true가 나오게 되고, a==c는 메모리 주소값이 다르기 때문에 false가 출력된다.
'개발 > Java' 카테고리의 다른 글
[학부생이 알려주는 JAVA 강의] 3. 자바 Hello World 출력하기 (0) | 2018.01.08 |
---|---|
[JAVA Class] 2. history and characteristic of java (0) | 2018.01.07 |
[학부생이 알려주는 JAVA 강의] 2.자바의 역사와 특징 (0) | 2018.01.01 |
[JAVA Class] 1. Java build environment (0) | 2017.12.19 |
[학부생이 알려주는 JAVA 강의] 1.자바 환경 구축 (JDK 설치, 이클립스 설치) (0) | 2017.12.18 |