java.lang
- 기본적인 클래스 포함하고있음. 그래서 import문 없이도 사용하도록 해줌
- toString이나 equal, getClass
clone
- 기본적으로 얕은복사이기때문에 깊은 복사를 진행하려면
- Cloneable을 상속받고, 오버라이딩 해주어야한다
공변반환타입
- 오버라이딩 시 조상메서드의 반환타입을 자손클래스의 타입으로 변경가능
public Point clone(){
...
return (Point)obj;
}
문자열의 비교
String x1 = "a";
String x2 = "a";
String x3 = new String("a");
System.out.println(x1==x2);
System.out.println(x3==x2);
빈 문자열
- 길이가 0인 배열을 생성할 수 있다 String은 내부적으로
char[]
로 구현되어있고, 빈문자열의 경우 배열의 길이가 0이다
String str = null;
String str2 = "";
StringBuffer
- String클래스는 인스턴스를 생성할때 지정된 문자열을 변경할 수 없다
- StringBuffer클래스는 변경이 가능하다
- 문자열 편집을 위한 버퍼를 가지고 있다.
- String클래스와 다르게 equal을 오버라이딩해놓지 않아서 equal메서들를 써도 ==을쓴것과 같이 주솟값만을 비교한다
StringBuilder
- 멀티스레드에 안전하도록 동기화되어있다
- 동기화는 StringBuffer의 성능을 떨어뜨린다
- StringBuilder: StringBuffer에서 스레드 동기화를 뺀 것
StrictMath
- Math 클래스는 최대한의 성능을 얻기위해 JVM이 설치된 OS의 메서들를 호출해서 사용한다 -> OS에 의존적인 계산
- 어떤 os에서 실행돼도 항상 같은 결과를 얻도록 Math클래스를 새로작성한것.
- 성능은 다소 떨어짐
Wrapper class
Integer x1 = 2;
Integer x2 = 2;
System.out.println(x1==x2);
- ==연산시 주솟값을 비교함. 하지만 이것은 리터럴이기때문에 값을 비교함
리터럴을 넣어줬을땐 x1에 진짜 값이 저장되고, 만약 객체를 넣어줬을땐 주솟값을 넣어준다는 얘기