모든 클래스의 최고 조상
오직 11개의 메서드만을 가지고 있다.
객체 자신과 주어진 객체를 비교한다 ☞ 객체의 "주소"를 비교한다
주소가 같으면 true, 다르면 false
인스턴스 변수의 "값"을 비교하도록 equals()를 오버라이딩해야 한다.
객체의 해시코드(hash code)를 반환하는 메서드
Object클래스의 hashCode() 객체의 주소를 int로 변환해서 반환
public class Object {
...
public native int hashcode(); // OS에 작성되어 있는 메서드라 내용 작성 X
}
네이티브 메서드 : OS가 가지고 있는 메서드
equals()를 오버라이딩하면, hashCode()도 오바라이딩해야한다.
(=equals() 결과가 true인 두 객체의 해시코드는 같아야 하기 때문)
객체(=iv값)를 문자열로 변환하기 위한 메서드
String클래스 = 데이터(char[]) + 메서드(문자열 관련)
내용을 변경할 수 없는 불변(immutable) 클래스이다
☞ + 를 이용한 문자열 결합은 성능이 떨어지므로, 문자열 결합 및 변경이 잦으면 내용이 변경가능한 StringBuffer를 사용한다
// 문자열 리터럴 "abc" 주소 str1, str2 각각 저장(같은 주소 공유)
String str1 = "abc";
String str2 = "abc";
// 새로운 String 인스턴스를 생성, 각기 다른 주소로 저장
String str3 = new String("abc");
String str4 = new String("abc");
== : 주소비교
equals() : 값 비교
문자열 리터럴은 프로그램 실행 시 자동으로 생성된다 (Constant pool에 저장)
같은 내용의 문자열 리터럴은 하나만 만들어진다(String객체는 불변이기에 하나를 공유해도 문제되지 않는다)
내용이 없는 문자열
크기가 0인 char형 배열을 저장하는 문자열
// char와 String의 초기화
String s = "";
char c = ' ';
주어진 문자열을 갖는 String 인스턴스 생성
StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String인스턴스를 생성한다
지정된 위치에 있는 문자를 알려준다
문자열을 사전순서로 비교한다. 같으면 0을, 사전순으로 이전이면 음수를, 이후면 양수를 반환한다.
문자열을 뒤에 덧붙인다
지정된 문자열 s가 포함되었는지 검사한다
지정된 문자열로 끝나는지 검사한다
⎻ cf. startWith()
매개변수 문자열과 String 인스턴스 문자열 비교
대소문자 구분없이 문자열 비교
주어진 문자가 문자열에 존재하는지 확인하여 위치를 알려준다. 못 찾으면 -1을 반환한다
문자열에 위치하는지를 지정된 위치부터 확인하여 index를 알려준다
주어진 문자열이 존재하는지 확인하여 그 위치를 알려준다
지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치를 알려준다(문자열 index는 고정이다)
문자열 오른쪽 끝에서부터 찾아서 위치를 알려준다(문자열 index는 고정이다)
문자열 길이 반환
문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다
문자열을 지정된 분리자로 나누어 문자열 배열에 담아 반환한다. 단, 문자열 전체를 지정된 수로 자른다
주어진 문자열로 시작하는지 검사
주어진 시작위치부터 끝 위치 범위에 포함된 문자열을 얻는다. (시작위치는 문자 범위에 포함되나, 끝 위치 문자는 포함되지 않는다)
String인스턴스에 저장되어 있는 모든 문자열을 소문자로 변환
모든 문자열을 대문자로 변환하여 반환한다
문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 없앤 결과 반환. 중간에 있는 공백은 제거되지 않는다
지정된 값을 문자열로 변환하여 반환한다.
참조변수의 경우, toString()을 호출한 결과를 반환한다
여러 문자열 사이에 구분자를 넣어서 결합한다
String[] arr = animals.split(",");
String str = String.join("-", arr);
숫자 + "";
String.valueOf(i);
int i = Integer.parseInt("100");
Integer i = Integer.valueof("100");
int i = Integer.valueof("100");
int i = Integer.parseInt("100", 2) // 4
int i = Integer.parseInt("100", 8) // 64
String과 달리 내용을 변경할 수 있다
StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야 한다(저장 공간이 부족하면 배열 새로 생성해야한다)
16문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성
지정된 개수의 문자 버퍼를 가진 인스턴스 생성
지정된 문자열 값을 갖는 인스턴스 생성
StringBuffer sb = new StringBuffer("abc");
sb.append("123");
append() : 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환
delete() : 삭제
insert() : 삽입
☞ 반환 타입이 StringBuffer
StringBuffer는 equals()가 오버라이딩 되어 있지 않다 ☞ 주소비교
❗️ 즉, String으로 변환 후에 equals로 비교를 해야 한다
매개변수로 입력된 값을 문자열로 변환하여 StringBuffer 문자열의 뒤에 덧붙인다
버퍼크기를 알려준다
저장된 문자열의 길이를 알려준다
지정 위치의 문자 반환
시작위치~끝위치 사이 문자 제거 (끝 위치 문자는 제외)
지정된 위치 문자 제거
두번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치에 추가한다
지정된 범위 문자들을 주어진 문자열로 바꾼다. end 위치는 불포함
문자열 순서를 거꾸로 나열한다
지정된 위치 문자를 지정 문자로 바꾼다
지정된 길이로 문자열 길이를 변경한다.
길이 늘리는 경우 나머지 빈 공간을 null문자('\u0000')로 채운다
StringBuffer → String
지정된 범위 문자열을 String으로 뽑아서 반환
StringBuffer는 동기화 되어 있으나(=멀티쓰레드에 안전), StringBuilder는 동기화 되어 있지 않다.
멀티쓰레드 프로그램이 아닐 경우, 동기화는 불필요한 성능저하를 야기하므로, 이럴 경우 StringBuilder 대신 StringBuilder를 사용하면 성능이 향상
수학관련 static 메서드의 집합
주어진 값의 절대값 반환
주어진 값을 올림하여 반환
주어진 값을 버림하여 반환
최댓값, 최솟값 반환
0.0~1.0 사이 임의의 double값 반환
주어진 double과 가장 가까운 정수값을 double형으로 반환
정 가운데 값은 짝수를 반환한다
소수 첫째자리에서 반올림한 정수값을 반환
정가운데 값은 항상 큰 정수를 반환
기본형 값을 감싸는 클래스
8개 기본형을 "객체"로 다루어야할 때 사용한다
모든 숫자 래퍼 클래스의 조상
오토박싱 : 기본형 → Wrapper클래스
언박싱 : Wrapper클래스 → 기본형
JDK1.5 이전에는 기본형, 참조형 간 연산이 불가능했다
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10) // [오토박싱]컴파일러: list.add(new Integer(10));
int value = list.get(0) // [언박싱]
java.time 패키지 - Date와 Calendar 단점을 개선한 새로운 클래스 제공
추상클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다
Calendar cal = Calendar.getInstance(); //현재 날짜와 시간으로 셋팅
int thisYear = cal.get(Calendar.YEAR);
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막 날
❗️ MONTH : 월_'0'부터 시작한다
날짜와 시간 지정 가능하다
Calendar date1 = Calendar.getInstance();
date1.set(2017,7,15);
Calendar time1 = Calendar.getInstance():
time1.set(Calendar.HOUR_OF_DAY,10);
time1.set(Calendar.MINUTE,20);
time1.set(Calendar.SECOND,30);
Calendar 객체의 모든 필드 초기화
필드 값을 증가 또는 감소시킨다 (다른 필드에 영향을 준다)
특정 필드 값을 증가 또는 감소시키나, 다른 필드에 여향을 주지 않는다
Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMills());
Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);
java.text패키지
숫자와 날짜를 원하는 형식으로 쉽게 출력 가능하다
반대로 형식 문자열에서 숫자와 날짜를 뽑아내는 기능도 있다
숫자를 형식화할 때 사용한다
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number); // "1.2E6"
특정 형식의 문자열을 숫자로 변환할 때도 사용한다
DecimalFormat df = new DecimalFormat("#,###.##");
Number num - df.parse("1,234,567.89");
double d = num.doubleValue();
❗️ Integer.pareInt()는 콤마가 포함된 문자열을 숫자로 변환하지 못한다
날짜와 시간을 다양한 형식으로 출력할 수 있게 한다
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);
특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date d = df.parse("2015년 11월 23일");
String result = df2.format(d);