String s = new String("hi");
String s = "hi";
위 두 문장은 완전히 다르다.
첫 문장은 실행마다 새로운 String 객체를 생성하고, 두번째 문장은 하나의 String 객체를 생성한 뒤 재사용하는 방식으로 동작한다.
생성자 대신 정적 팩터리 메서드를 사용하여 객체를 재사용할 수 있다 (Item 1)
어댑터 : 제 2의 인터페이스. 뒷단 객체 하나당 하나의 어댑터만 사용함으로써 직관성과 불필요한 객체 생성을 막을 필요가 있다
오토박싱: 기본 타입과 박싱 타입을 섞어 쓸 때 자동으로 박싱 타입으로 변환해주는 것
잘 알고 사용해야함
박싱 타입 클래스를 하나 생성하게 되는 것이므로 비용이 발생
그러나 코드의 간결성, 박싱 타입 메서드 활용, 가독성 등을 위해 사용하는 것은 객체 생성에 큰 비용이 들지 않으므로 오히려 권장하는 방법
무거운 객체 생성을 피하기 위해 객체 풀을 만드는 것은 좋은 방법이나, 가비지 컬렉터가 최적화됨에 따라 오히려 성능 저하가 일어날 수 있다.
이번 장은 "기존 객체를 다룰 때 불필요하게 새로운 객체를 생성하지 말라는 것" 이지, "새로운 객체를 생성해야할 때, 기존 객체를 재사용하라" 와는 다른 말이다.