써먹는 웹개발

[JAVA]문자열 비교 ==을 쓸때와 EQUALS을 쓸때의 차이 본문

웹개발/Java & Jsp

[JAVA]문자열 비교 ==을 쓸때와 EQUALS을 쓸때의 차이

kmhan 2018. 5. 28. 10:21


728x90
반응형

2020/04/24


문자열 생성방식에는 두가지가 있는데

  1. new 연산자를 이용한 방법
  2. 리터럴을 이용한 방법
1번 방법으로 하면 ==(주소 비교)으로 충분히 값의 같음을 비교할 수 있습니다.
2번 방법은 주소가 달라져서 ==으로 비교할 수 없으므로 a.equals(b)를 써야됩니다. (주소값 비교) 



kafka structure


출처 : https://dydtjr1128.github.io/java/2019/04/23/JAVA-String.html



6/5

※ 같은 map의 다른 부분을 서로 비교할때도 ==을 사용하면 안됩니다.


--------------------------------------------

5/28

문자열을 만들 때는 두 가지 방법, 문자열 리터럴을 지정하는 방법과 String클래스의 생성자를 사용해서 만드는 방법이 있다. 이 예제는 문자열을 리터럴로 생성하는 것과 String클래스의 생성자를 사용해서 생성하는 것과의 차이를 보여 주기 위한 것이다.

equals(String s)를 사용했을 때는 두 문자열의 내용("abc")을 비교하기 때문에 두 경우 모두 true를 결과로 얻는다. 하지만, 각 String인스턴스의 주소값을 등가비교연산자(==)로 비교했을 때는 결과가 다르다. 리터럴로 문자열을 생성했을 경우, 같은 내용의 문자열들은 모두 하나의 String인스턴스를 참조하도록 되어 있다. 어차피 String인스턴스가 저장하고 있는 문자열은 변경할 수 없기 때문에 아무런 문제가 없다.


그러나, String클래스의 생성자를 이용한 String인스턴스의 경우에는 new연산자에 의해서 메모리할당이 이루어지기 때문에 항상 새로운 String인스턴스가 생성된다.
아래의 왼쪽 그림은 리터럴로 문자열을 생성했을 때의 상황이고, 오른쪽 그림은 생성자를 이용해서 문자열을 생성했을 때의 상황을 그림으로 나타낸 것이다.

 

[출처 : 자바(java)초보스터디 http://cafe.naver.com/javachobostudy.cafe]


728x90
반응형


Comments