기본 패키지라서 별도의 import 없이 사용 가능하다.
재정의 가능한 메소드
protected Object clone() throws CloneNotSupportedException()
객체의 참조(주소)값만 복사하는 얕은 복사가 아닌 참조대상값(메모리)을 복사하는 깊은 복사
public boolean equals(Object obj)
객체가 동일한지 확인하여 결과 반환
protected void finalize() throws Throwable
가비지 컬렉션이 수행될 때 자동으로 호출
public final Class getClass()
객체의 실행 클래스 반환
public int hashCode()
객체의 해시 코드 값 반환
메모리의 안정성을 위해 프로그램이 메모리에 직접 접근하는 것을 막고, new 연산자를 이용해 메모리를 할당할 때 메모리에 접근할 수 있는 코드인 해시코드를 생성한다.
public String toString()
객체를 대표하는 문자열로 반환
재정의 불가능한 메소드
동기화와 관련된 스레드 제어 메소드 들이다.
문자열 변경 시 새로운 객체를 생성하지 않고, 버퍼에 담겨있는 문자열 바로 수정, 동기화 지원
StringBuffer()와 기본적인 동작 같으나 동기화(Thread safe) 지원안함
자바의 기본형 데이터타입을 클래스화하기 위해 사용하는 클래스로 기본형 데이터 타입을 클래스화하면 Object 클래스의 자식 클래스가 되어 데이터형에 상관없이 Object 클래스를 이용하여 처리할 수 있다.
public class WrapperEx {
public void printWrapper(Object obj) {
System.out.println("데이터 : " + obj);
System.out.println("데이터 클래스 : " + obj.getClass());
}
public static void main(String[] args) {
int i = 123;
double d = 3.14;
WrapperEx wp = new WrapperEx();
wp.printWrapper(i);
//데이터 : 123
//데이터 클래스 : class java.lang.Integer
wp.printWrapper(d);
//데이터 : 3.14
//데이터 클래스 : class java.lang.Double
}
기본형 데이터 타입을 객체화 시키는 작업
int i = 10;
Integer iValue1 = new Integer(i);
Integer iValue2 = new Integer(123);
double d = 1.123;
Double dValue1 = new Double(d);
Double dValue2 = new Double(5.323);
객체에 저장되어 있는 데이터를 기본형 데이터로 꺼내는 작업
Integer iValue = new Integer(4578);
int i = iValue.intValue();
Double dValue = new Double(44.241);
double d = dValue.doubleValue();
자바 JDK1.5 이상부터는 기본 타입과 Wrapper클래스 타입 간의 변환이 자동으로 이루어진다
int i = 10;
Integer iValue = i;
Double dValue = new Double(3.14);
double d = dValue;
Object 클래스와 유사한 이름을 가진 클래스로 객체 비교, 해시코드 생성, null 여부, 객체 문자열 리턴 등의 연산을 수행할 수 있다.
난수 발생 방법 ⇒ Math.random(), Random 클래스 이렇게 두가지가 있다.
Math.random()은 정적 메소드로 객체를 생성하지 않고 편하게 사용할 수있지만 double 형의 난수만 발생시킬 수 있다.
Random 클래스는 객체를 생성해야하는 불편함이 있지만 int, long, float, double, boolean 형의 난수를 발생시킬 수 있다.
public void testRandom() {
Random r = new Random();
System.out.println("nextInt() : "+ r.nextInt()); // -2^31 ~ 2^31-1 사이의 난수
System.out.println("nextInt(100) : "+ r.nextInt(100)); // 0~100 사이의 난수
System.out.println("nextBoolean() : "+ r.nextBoolean()); // true 또는 false
System.out.println("nextDouble() : "+ r.nextDouble()); // double형 표현범위의 난수
System.out.println("nextFloat() : "+ r.nextFloat()); // float형 표현범위의 난수
}