Java
package object;
public class ObjectApp1 {
public static void main(String[] args) {
Person p1 = new Person(10, "홍길동", "hong@gmail.com");
Person p2 = new Person(10, "홍길동", "hong@gmail.com");
Person p3 = p1;
Person p4 = p2;
// boolean equals(Object obj) 메소드
// 객체 자신과 obj객체가 동일한 객체인지 여부를 반환한다
boolean result1 = p1.equals(p2);
boolean result2 = p2.equals(p1);
System.out.println("p1이 참조하는 객체와 p2가 참조하는 객체가 같은 객체인가?" + result1);
System.out.println("p2이 참조하는 객체와 p1가 참조하는 객체가 같은 객체인가?" + result2);
}
}
package object;
public class ObjectApp2 {
public static void main(String[] args) {
Person p1 = new Person(10, "홍길동", "hong@gmail.com");
Person p2 = new Person(20, "김유신", "kim@naver.com");
// String toString()
// 객체에 대한 간단한 정보를 문자열로 변환한다.
// 객체의 멤버변수에 저장된 정보를 반환하도록 재정의해서 사용한다.
System.out.println(p1); // 참조변수값을 출력하면 참조변수.toString()의 반환값이 출력된다.
System.out.println(p2);
System.out.println(p1.toString());
System.out.println(p2.toString());
}
}
임시저장소(버퍼)를 가지고 있어서, append(다양한 타입의 데이터)로 새로운 객체 생성없이 임시저장소에 데이터를 저장할 수 있다.
임시저장소에 저장된 데이터는 toString() 메소드를 실행해서 문자열(String)로 제공받을 수 있다.
StringBuilder와 StringBuffer의 사용법은 완전히 동일하다.
사용 예제
String text = "국어" + 70 + "수학" + 80 + "영어" + 100;
// ["국어"]
// ["국어70"]
// ["국어70수학"]
// ["국어70수학80"]
// ["국어70수학80영어"]
// ["국어70수학80영어100"]
// text에 최종적으로 대입되는 값은 "국어70수학80영어100" 다.
// String객체의 불변특성 때문에 불필요한 객체 5개가 추가로 생성된다.
StringBuilder sb = new StringBuilder();
sb.append("국어"); // 버퍼에 저장
sb.append(70); // 버퍼에 저장
sb.append("수학"); // 버퍼에 저장
sb.append(80); // 버퍼에 저장
sb.append("영어"); // 버퍼에 저장
sb.append(100); // 버퍼에 저장
String finalText = sb.toString(); // 버퍼에 저장된 데이터가 전부 연결된 문자열이 반환된다.
StringBuilder를 사용하면 "+" 연산을 사용해서 이어붙이기 할 때 보다 불필요한 객체의 생성이 억제되어서 메모리 효율 및 실행 성능이 개선된다.
JAVA 1.5버전부터 도입된 기능
기본자료형 타입과 Wrapper객체 타입간의 변환을 자동으로 지원한다.
오토박싱
Integer instance = new Integer(10); // 박싱
Integer instance = 10; // 오토박싱
// Integer instance = new Integer(10); // 실제로 실행되는 코드
오토언박싱
Integer instance = new Integer(10); // 박싱
int value = instance.intValue(); // 언박싱
int value = instance; // 오토 언박싱
// int value = instance.intValue(); // 실제로 실행되는 코드
실제 활용 예제
public class Sample {
public void test1(int value) {
수행문
}
public void test2(Integer instance) {
수행문
}
}
public static void main(String args) {
Sample sample = new Sample();
sample.test1(1);
sample.test2(1); // 실제 실행되는 코드 sample.test2(new Integer(1));
}