ch 09 java.lang + 유용한 클래스

김민지·2023년 1월 19일
0

자바의정석

목록 보기
8/8

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);//true
System.out.println(x3==x2);//false

빈 문자열

  • 길이가 0인 배열을 생성할 수 있다 String은 내부적으로 char[]로 구현되어있고, 빈문자열의 경우 배열의 길이가 0이다
String str = null;
//char c = '\u0000'
String str2 = "";
//char c = ' ';

StringBuffer

  • String클래스는 인스턴스를 생성할때 지정된 문자열을 변경할 수 없다
  • StringBuffer클래스는 변경이 가능하다
  • 문자열 편집을 위한 버퍼를 가지고 있다.
  • String클래스와 다르게 equal을 오버라이딩해놓지 않아서 equal메서들를 써도 ==을쓴것과 같이 주솟값만을 비교한다

StringBuilder

  • 멀티스레드에 안전하도록 동기화되어있다
  • 동기화는 StringBuffer의 성능을 떨어뜨린다
  • StringBuilder: StringBuffer에서 스레드 동기화를 뺀 것

StrictMath

  • Math 클래스는 최대한의 성능을 얻기위해 JVM이 설치된 OS의 메서들를 호출해서 사용한다 -> OS에 의존적인 계산
  • 어떤 os에서 실행돼도 항상 같은 결과를 얻도록 Math클래스를 새로작성한것.
  • 성능은 다소 떨어짐

Wrapper class

  • 모두 equal을 오버라이딩 하고 있음
Integer x1 = 2;
Integer x2 = 2;
System.out.println(x1==x2);
  • ==연산시 주솟값을 비교함. 하지만 이것은 리터럴이기때문에 값을 비교함
    리터럴을 넣어줬을땐 x1에 진짜 값이 저장되고, 만약 객체를 넣어줬을땐 주솟값을 넣어준다는 얘기
profile
안녕하세요!

0개의 댓글