728x90
문제
우리가 프로그래밍을 할 때 데이터 값이나 문자열을 비교할 때 가장 많이 쓰이는 연산자와 문자열을 꼽자면 ==과 .equals() 일 것이다. 이 둘은 문자열의 값을 비교할 때 각각 어떤 차이가 있을까?
학습
== 연산자와 .equals() 메소드의 비교
1. == 연산자
-비교를 위한 연산자
-주소값을 비교한다. (Call By Reference)
-실제 내용이 아니라 그 내용이 적힌 주소를 비교하는 것임
따라서,
String str1="abc";
String str2="abc";
라고 저장한다면, 우리가 보기에 내용이 같기에 ==연산자를 사용했을 때, true를 반환한다고 생각할 수 있지만 컴퓨터의 메모리에 적힌 임의의 주소값은 완전히 다르기때문에 이는 false를 반환한다.
추가로 만약,
String str3 = str1; 이라고 선언해 준다면 그건 str1의 주소값을 str3에 넘겨준 것이므로 true를 반환한다.
2. .equals() 메소드
-객체의 내용을 비교한다. (Call By Value)
1번과 같이 스트링 문자열을 선언하면
String str1="abc";
String str2="abc";
.equals() 메소드는 내용 자체를 비교하므로 true를 반환한다.
코드
public Main {
public static void main(String[] args){
String str1 = "abc";
String str2 = str1;
String str3 = "abc";
// == 연산자는 주소를 비교합니다.
System.out.println(str1 == str2); // true
// str2 에 st1 값을 넣었으므로 주소를 같이 공유합니다.
System.out.println(str1 == str3); // false
// str1 과 str3는 각각 생성 되었으므로 주소가 다릅니다.
// equals() 는 내용을 비교합니다.
System.out.println(str1.equals(str2)); // ture
System.out.println(str1.equals(str3)); // true
}
}
lnsideout.tistory.com/entry/JAVA%EC%9E%90%EB%B0%94-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90-equals-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90
728x90
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] 회사 직원 봉급 계산 프로그램 (클래스의 상속) (0) | 2021.05.30 |
---|---|
[JAVA] 백준 1546 평균 (0) | 2021.04.15 |
[JAVA] 백준 8958 OX퀴즈 (String과 char 자료형의 차이, charAt()) (0) | 2021.04.15 |
[JAVA] 백준 4344 평균은 넘겠지 (0) | 2021.04.15 |
[JAVA] 백준 10951 A+B -4 (Scanner메소드-hasNextInt) (0) | 2021.03.31 |