250x250
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 | 31 |
Tags
- 티스토리챌린지
- 테스트코드
- http 메시지 컨버터
- 다형성
- DI
- 스프링컨테이너
- 백준
- @configuration
- 서블릿
- ocp
- java
- 코딩테스트
- 의존관계
- 코드트리
- 코드트리조별과제
- 오버라이딩
- 오블완
- 프록시
- equals()
- 싱글톤
- 김영한
- 인터페이스
- 스프링
- fielderror
- JSON
- 참조변수
- 추상클래스
- HttpServletResponse
- objecterror
- html form
Archives
- Today
- Total
minOS
자바의 정석 ch9-7~10 String클래스, 문자열 비교, 빈 문자열 본문
728x90
ch9-7 String클래스
- String클래스 = 데이터(char[]) + 메서드(문자열 관련)
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[]; // 문자열을 저장하는 배열 (불변성 유지) private final int count; // 문자열의 길이 // String의 생성자 public String() { this.value = new char[0]; // 빈 문자열을 초기화 this.count = 0; } public String(String original) { this.value = original.value; // 새로운 문자열을 원본에서 복사 this.count = original.count; } public int length() { return this.count; } public char charAt(int index) { if (index < 0 || index >= count) { throw new StringIndexOutOfBoundsException(index); } return value[index]; } public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } if (endIndex > count) { throw new StringIndexOutOfBoundsException(endIndex); } if (beginIndex > endIndex) { throw new StringIndexOutOfBoundsException(endIndex - beginIndex); } return new String(value, beginIndex, endIndex - beginIndex); } public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; } // 그 외 다양한 메서드들... }
- 내용을 변경할 수 없는 불변(immutable) 클래스
- 덧셈 연사자(+)를 이용한 문자열 결합은 할때마다 새로운 객체가 만들어져서 성능이 떨어짐
문자열의 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer를 사용
ch9-8 문자열의 비교
- String str = "abc"; 와 String str = new String("abc"); 의 비교
== : 객체의 참조(메모리 위치)를 비교.
equals() : 객체의 내용을 비교.
결론 : 두 객체의 내용이 같은지를 비교하고 싶다면, equals() 메서드를 사용하는 것이 필수적이다. ==를 사용하면 의도치 않은 결과를 초래할 수 있다.
String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1 == str2); // false, 서로 다른 메모리 위치 System.out.println(str1.equals(str2)); // true, 같은 내용
ch9-9 문자열 리터럴
- 문자열 리터럴은 프로그램 실행시 자동으로 생성된다. (constant pool에 저장 :상수 저장소)
- 같은 내용의 문자열 리터럴은 하나만 만들어진다.
ch9-10 빈 문자열("",Empty String)
- 내용이 없는 문자열. 크가가 0인 char형 배열을 저장하는 문자열
String str ="";//str을 빈 문자열로 초기화
- 길이가 0인 배열을 생성하는 것은 어느 타입이나 가능
char[] chArr = new char[0]; //길이가 0인 char배열 int[] iArr = {}; // 길이가 0인 int배열
- 문자(char)와 문자열(String)의 초기화Stirng s = ""; char c = ' ';
728x90
'TIL > 남궁성의 자바의 정석' 카테고리의 다른 글
자바의 정석 ch9-4~6 hashCode(), toString() (1) | 2024.09.25 |
---|---|
자바의 정석 ch9-1~3 Object 클래스와 equals() (0) | 2024.09.25 |
자바의 정석 ch8-18 연결된 예외(chained exception) (0) | 2024.09.23 |
자바의 정석 ch8-15~17 사용자 정의 예외 만들기, 예외 되던지기 (1) | 2024.09.14 |
자바의 정석 ch8-11~14 예외선언하기 ,finally블럭 (1) | 2024.09.12 |