
| 메소드 | 설명 |
|---|---|
boolean equals(Object obj) | 동등성 비교(필드 기준으로 재정의해서 사용) |
int hashCode() | 객체의 해시 코드(컬렉션 키로 사용 시 equals와 함께 재정의) |
String toString() | 객체 정보를 문자열로 반환(디버깅/로그용으로 재정의) |
@Override
public String toString() {
return "Book[number=" + number + ", title=" + title + ", author=" + author + ", price=" + price + "]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Book)) return false;
Book b = (Book) o;
return number == b.number &&
price == b.price &&
Objects.equals(title, b.title) &&
Objects.equals(author, b.author);
}
@Override
public int hashCode() {
return Objects.hash(number, title, author, price);
}
+/concat() → 새 인스턴스 생성.equals() 사용(리터럴 풀, new String() 차이 주의).| 메소드 | 한 줄 요약 |
|---|---|
charAt(i) | i번째 문자 |
compareTo()/compareToIgnoreCase() | 사전식 비교(대/소문자 구분 옵션) |
concat(s) | 이어붙인 새 문자열 |
indexOf()/lastIndexOf() | 앞/뒤에서 찾기(없으면 -1) |
trim() | 앞뒤 공백 제거 |
toLowerCase()/toUpperCase() | 소/대문자 변환(원본 불변) |
substring(b, e) | [b, e) 범위 잘라내기 |
replace(a, b) | 문자열 치환(새 문자열) |
length()/isEmpty() | 길이/빈문자열 판단 |
split(regex[, limit]) | 정규표현식 분리(마지막 공백 토큰은 limit로 제어) |
String s1 = "java"; // 풀 재사용
String s2 = "java"; // s1과 같은 인스턴스
String s3 = new String("java"); // 새 인스턴스
// 비교는 항상
s1.equals(s3); // true
split(regex): 정규표현식, 빈 토큰 유지 가능(limit = -1).StringTokenizer: 구분자 문자 집합, 빈 토큰 무시, 빠름.\n(개행) \t(탭) \' \" \\
정규식 특수문자 split 시: \$ \. \[ \] \* \+ \? \^ \{ \} \| (앞에 \\)
| String | StringBuilder | StringBuffer | |
|---|---|---|---|
| 변경 가능 | ✗ | O | O |
| 동기화 | ✗ | ✗ | O (synchronized) |
| 쓰레드 안전 | O(불변) | ✗ | O |
| 일반 성능 | 보통 | 빠름 | 느림 |
멀티스레드 환경 아니면 보통 StringBuilder 권장.
append(x), insert(idx, x), delete(s, e), deleteCharAt(i), reverse(),capacity(), length(), toString()StringBuilder로!| 기본 | Wrapper |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
int n = 20;
Integer a = Integer.valueOf(n); // 박싱
int b = a.intValue(); // 언박싱
Integer c = n; // 오토 박싱
int d = c; // 오토 언박싱
equals()(생성 방식에 따라 ==는 주의).Integer.parseInt("10"), Double.parseDouble("3.14") …String.valueOf(10) 또는 Integer.valueOf(10).toString()Character는 parse 없음 → "abc".charAt(0)Date(대부분 Deprecated), Calendar(가변/월 0~11/윤초 미고려 등 불편).불변(immutable), 쓰레드 안전, 명확한 타입과 풍부한 유틸.
주요 클래스
LocalTime(시간), LocalDate(날짜), LocalDateTime(둘 다)ZonedDateTime(시간대 포함), ZoneId, DateTimeFormatter생성: now() / of()
LocalTime t = LocalTime.now();
LocalDate d = LocalDate.of(2022, 1, 1);
LocalDateTime dt = LocalDateTime.of(d, t);
ZonedDateTime zdt = ZonedDateTime.of(d, LocalTime.of(18,30), ZoneId.of("Asia/Seoul"));
조회: getXxx()
d.getYear(); d.getMonthValue(); d.getDayOfWeek();
t.getHour(); t.getMinute(); t.getSecond();
zdt.getOffset(); zdt.getZone();
변경: with/plus/minus (원본 불변)
dt.plusMinutes(30);
dt.minusYears(1);
dt.withDayOfYear(1);
비교: isAfter/isBefore/isEqual
LocalDate.now().isAfter(LocalDate.of(2020,11,11)); // true/false
파싱/포맷: parse/format
LocalDate.parse("2022-10-12");
LocalTime.parse("14-05-10", DateTimeFormatter.ofPattern("HH-mm-ss"));
LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
Date/Calendar 변환(레거시 연동)
// Calendar -> Date
Date date = new Date(Calendar.getInstance().getTimeInMillis());
// Date -> Calendar
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
equals ↔ hashCode 함께 재정의, toString 로깅 친화적으로.equals 사용, 무거운 연결은 StringBuilder.equals.LocalDate/Time/DateTimeFormatter), 불변/명확.