java lang 패키지 안에 존재함(기본적인 동작을 수행하는 패키지들임)
Object클래스는 모든 자바 클래스의 최고 조상이므로, 모든 클래스는 Object 클래스의 메소드를 사용 할 수 있음
문자열을 다루는 메소들을 모은 class임.(java.lang 패키지 포함), 불변클래스임
String 인스턴스는 한번 생성되면 그 값을 읽기만 할 수 잇고 변경 할 수 없음 (불변객체임)
=> 덧셈 연산자를 이용해 문자열 결합을 수행하면 기존의 문자열이 변경되는 것이 아니라 새로운 String 인스턴스가 메모리에 올라감.
String Class의 인스턴스는 한번 생성되면 그 값을 변경 할 수 없음
String Buffer 클래스의 인스턴스는 값을 변경 할 수도 있고 추가할 수도 있음. 가변클래스임
이를 위해 Buffer가 존재함.
append나 insert를 통해 문자열을 초과했을 때 buffer 크기보다 커진 경우 알아서 buffer크기를 늘려준다.
- 덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성합니다. 따라서 문자열을 많이 결합하면 결합할수록 공간의 낭비뿐만 아니라 속도 또한 매우 느려지게 됩니다.
- StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빨라집니다. 이러한 StringBuffer 클래스는 java.lang 패키지에 포함되어 제공됩니다.
primitive type의 데이터를 객체로 type casting 해야할 때 사용함
정수형 => byte, short, int long
실수형 => float double
문자형 => char
enum을 비교할 때 실제 값뿐만 아니라 type check도 진행함
enum의 상수값이 재정의되더라도 다시 컴파일 할 필요가 없음
java.util 패키지 안에 존재함(import해야함)
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법입니다.이렇게 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과 같은 장점을 가집니다.
사용이유 => 하나의 클래스의 타입을 정적으로 고정시키는게 아니라, 사용하는쪽에서 동적으로 원하는 type으로 사용하고 싶을 때 제너릭을 사용함 (컴파일시에 타입이 결정됨)
class MyArray<T> {
T element;
void setElement(T element) { this.element = element; }
T getElement() { return element; }
}
MyArray<Integer> myArr = new MyArray<Integer>();
MyArray<Integer> myArr = new MyArray<>(); // 타입 생략가능 Java SE 7부터 가능함.
타입제한 가능
제너릭 메소드 : 선언부에 타입변수를 사용한 메소드임.
class AnimalList<T extends LandAnimal> { ... } // LandAnimal Type만 사용가능
interface WarmBlood { ... }
...
class AnimalList<T extends WarmBlood> { ... } // implements 키워드를 사용해서는 안됨.
class AnimalList<T extends LandAnimal & WarmBlood> { ... }
public static <T> void sort(List<T> list, Comparator<? super T> comp) {
}// 제네릭클래스 타입변수 T와 제네릭 메소드 타입변수 T는 다르게 취급