출처 : 자바의 정석
http://www.yes24.com/Product/Goods/24259565
https://cafe.naver.com/javachobostudy/20665
아래의 내용은 '자바의 정석'이라는 책의 내용을 간략하게 정리한 글입니다.
java.lang 패키지
매개변수로 객체의 참조변수를 받아서 비교하여 그 결과값을 boolean 값으로 알려 주는 역할을 한다.
equals 메서드는 주소값으로 비교
해시함수는 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드(hashcode)를 반환
String 클래스는 문자열 내용이 같으면 동일한 해시코드를 반환하도록 hashCode 메서드가 오버라이딩 되어 있음
자신을 복제하여 새로운 인스턴스를 생성하는 일을 한다.
Object 클래스에 정의된 clone()은 단순히 인스턴스 변수의 값만을 복사, 참조변수는 복사하지 않음
따라서 참조 타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 안됨
Cloneable 인터페이스가 구현된 클래서에서만 호출 가능, 미호출시 예외 발생
반드시 예외 처리 해줘야한다.
얕은 복사와 깊은 복사
clone은 얕은 복사에 해당한다.
이름이 Class인 클래스 객체
String 클래스
String str1 = "123"; // 주소값 : 0x100
String str2 = "123"; // 주소값 : 0x100
/*
str1 == str2
0x100 == 0x100
true
*/
String str3 = new String("123"); // 주소값 : 0x200
String str4 = new String("123"); // 주소값 : 0x300
/*
str3 == str4
0x200 == 0x300
false
*/
join & split
StringBuffer클래스와 StringBuilder클래스
Math 클래스
StrictMath 클래스
래퍼(wrapper) 클래스
자바에서는 8개의 기본형을 객체로 다루지 않는데 이것이 바로 자바가 완전한 객체지향 언어가 아니라는 애기를 듣는 이유
기본형들을 객체로 사용할 때는 객체로 변환해서 작업 수행
char형과 int형을 제외한 나머지는 자료형 이름 첫 글자를 대문자로 한 것이 각 래퍼 클래스 이름
char : Character
int : Interger
래퍼 클래스들은 모두 equals()가 오버라이딩 되어 있어 주소값이 아닌 객체가 가지고 있는 값을 비교
오토박싱(autoboxing) & 언박싱(unboxing)
오토박싱 : 기본형 값을 래퍼 클래스의 객체로 자동 변환하는 것
언박싱 : 래퍼 클래스의 객체를 기본형 값으로 변환하는 것
java.util.Objects 클래스
static boolean isNull(Object obj)
: 해당 객체가 null이면 true 아니면 false
static boolean nonNull(Object obj)
: isNull 과 반대
static T requireNonNull(T, obj)
: 객체가 null이면 NullPointerException 발생
static int compare(Object a, Object b, Comparator c)
: 두 대상이 같으면 0, 크면 양수, 작으면 음수
static boolean equals(Object a, Object b)
: Objects 클래스의 equals는 Object 클래스의 equals와 다르게 차이는 null 검사를 하지 않아도 된다는 차이점이 있다.
java.util.Random 클래스
java.util.StringTokenizer 클래스
StringTokeniner는 긴 문자열을 지정된 구분자를 기준으로 토큰이라는 여러 개의 문자열로 자르는데 사용
StringTokenizer는 구분자로 단 하나의 문자 밖에 사용하지 못함.
복잡한 구분자를 사용할 때는 정규식을 사용해야한다.
StringTokenizer(String str, String delim)
: 문자열을 구분자로 나누는 StringTokenizer 생성 (구분자는 토큰으로 간주하지 않음)
StringTokenizer(String str, String delim, boolean returnDelims)
: 문자열을 구분자로 나누는 StringTokenizer 생성 (returnDelims을 true로 하면 구분자도 토큰으로 간주)
int countTokens()
: 전체 토큰 수 반환
boolean hasMoreTokens()
: 토큰이 남아있는지 확인
String nextToken()
: 다음 토큰 반환
StringTokenizer st = new StringTokenizer(str, "+-*/=()", true);
// StringTokenizer는 단 하나의 구분자만 사용할 수 있기에 "+-*/=()" 전체가 하나의 구분자가 아닌 각각의 문자가 구분자로 사용된다.
split()은 빈 문자열도 토큰으로 인식하는 반면 StringTokenizer는 빈 문자열을 토큰으로 인식하지 않기 때문에 인식하는 토큰의 개수가 다르다.