Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 웹프로젝트 생성
- 환경변수 설정
- slice
- splice
- face_recognition
- comapreTo
- JSP파일 생성
- 오라클 아마존 연동 오류
- 에디터 편리하게 사용
- 문자열비교
- 자바
- 이클립스
- github
- Dymanic Web Project
- JDK설치
- 백준알고리즘
- 백준알고리즘 13909
- vmware work station
- Anaconda
- korean language pack for visual studio code
- 톰캐설치
- 데이터베이스 오류
- 깃허브
- visual studio code 확장팩
- the network adapter could not establish the connection
- 파이썬
- 이클립스 연동
- Live Server
- 백준알고리즘 창문닫기
- 이클립스 설치
Archives
- Today
- Total
물멍IT
[Java] - String 문자열 비교 본문
String 생성에는 두가지 방법이 있다.
1) 리터럴 방식
2) new String 방식
1 2 | String a = "abc"; //리터럴 방식 String b = new String("abc"); //new String 방식 | cs |
두가지 방식은 저장되는 메모리 공간이 틀리다.
리터럴 방식은 String constant pool에 new String 방식은 객체이므로 heap에 저장된다.
그렇기 때문에 값은 같아도 참조 값이 틀려지고 이는 문자열 '==' 비교시에 비교값이 달라지는 역할을 하게 된다.
어떻게 참조가 이루어 지는지 보자
아래와 같이 변수 선언을 했다고 하자
1 2 3 | String a = "abc"; String a1 = "abc"; String b = new String("abc"); | cs |
그러면, 리터럴방식으로 생성한 변수a의 값은 'string constant pool'에 동일한 값이 있는지 한번
스캔을 거치고 없으면 생성한다.
변수a1도 동일한 방식을 진행하고 'pool'에 같은 값이 있으므로 그 값을 참조한다.
변수b는 새로운 객체를 생성했으므로 'heap' 메모리에 값이 저장된다.
[대충 이런 구조]
이제, String 문자열 비교를 알아보자. 방법에는 크게 세가지가 있다.
1) '==' 매칭 연산자
2) equals 메소드
3) compareTo 메소드
1) '==' 매칭 연산자
두번째 세번째방식과 가장 큰 차이는 '=='연산자는 값이 아닌 참조값을 비교한다는 것이다.
즉, 아무리 값이 같아도 new String으로 생성한 변수는 같은 값으로 인지하지 않는다.
1 2 3 4 5 6 | String a = "abc"; String a1 = "abc"; String b = new String("abc"); System.out.println(a==a1); //true System.out.println(a==b); //false | cs |
2) equals 메소드
값을 비교하는 메소드로, String 비교할때 제일 많이 쓰이는 메소드이다.
어떤 방식으로 생성하였든 값만 같으면 true를 반환한다.
1 2 3 4 5 6 | String a = "abc"; String a1 = "abc"; String b = new String("abc"); System.out.println(a.equals(a1)); //true System.out.println(a.equals(b)); //true | cs |
참고로, equals는 대소문자를 구분하므로 대소문자 구분없이 값을 비교하고 싶다면
equalsIgnoreCase를 사용하면 된다.
1 2 3 4 | String a = "abc"; String a1 = "ABC"; System.out.println(a.equalsIgnoreCase(a1)); //true | cs |
3)compareTo 메소드
비교의 결과를 true / false 가 아닌 정수의 값으로 반환한다.
일치하면 0 , 그외에는 다른 값을 반환한다.( 반환하는 방식은 다루지 않겠다.)
1 2 3 4 5 6 | String a = "abc"; String a1 = "ABC"; String b = new String("abc"); System.out.println(a.compareTo(a1)); //32 System.out.println(a.compareTo(b)); //0 | cs |
'Java' 카테고리의 다른 글
[Java] - 자바 입력 System.in.read() (0) | 2020.04.10 |
---|---|
[Java] - 종합 개발툴 이클립스(eclipse) 설치 (0) | 2020.03.16 |
[Java] - 자바(Java)설치 및 환경변수 설정 (0) | 2020.03.15 |