public class EqualsTest01 {
public static void main(String[] args) {
Value v1 = new Value(10);
Value v2 = new Value(10);
System.out.println(v1); //h_javaLang.Value@6084fa6a
System.err.println(v2);//h_javaLang.Value@3a5476a7
System.out.println(v1 == v2); // 주소비교 : false
System.out.println(v1.equals(v2)); //false
}
}
class Value{
int value;
Value(int value){
this.value = value;
}
public class EqualsTest02 {
public static void main(String[] args) {
Person p1 = new Person(9312202777777L);
Person p2 = new Person(9312202777777L);
System.out.println(p1 == p2);
// new p1의 주소 == new p2의 주소 : false
System.out.println(p1.equals(p2));
// 아래 Person클래스에서 equals() 오버라이드했음
// p2(obj)가 Person타입의 인스턴스이고 && null이 아닐때
// p1의 regNo == p2의 regNo (true 반환)
System.out.println(p1.toString()); // 원래 주소값이 나오고 오버라이드하면 원하는 값이 출력된다
System.out.println(p1.hashCode()); // @뒤에 33abb81e 10진수를 16진수로 바뀐 값 출력
System.out.println("".equals(null)); // 가능
String a = null;
System.out.println(a.equals("")); // 불가능. 터짐
System.out.println(null.equals("")); //불가능.
}
}
class Person implements Serializable{
long regNo;
Person(long regNo){
this.regNo = regNo;
}
@Override
public boolean equals(Object obj) {
boolean result = false;
if(obj instanceof Person && obj != null){ // obj가 Person의 인스턴스인지 && obj가 null값이 아닐때
result = this.regNo == ((Person)obj).regNo;
} // p1의 regNo == p2의 regNo
return result;
}
@Override
public String toString() {
return "Person [regNo=" + regNo + "]";
}
// 오버라이드 하면 System.out.println(p1.toString());
//--> Person [regNo=9312202777777] 출력되고 (main매서드에서)
// 오버라이드 안하면 '주소값'이 나온다.
String aa = "Love";
String bb = "Love";
-> aa와 bb의 문자열이 "Love"로 동일 -> hashCode() 값이 동일하게 나온다.
System.out.println(aa.hashCode());
System.out.println(bb.hashCode());
클래스의 정보를 얻어올 때 사용한다.
(1) 생성된 객체로부터 얻는 방법
Class obj = new Person().getclass();
(2) 클래스 리터럴로부터 얻는 방법
Class obj = Person.class;
(3) 클래스명으로부터 얻는 방법
Class obj = Class.forName("Person");
-> 로드되어 있는 클래스중 "Person"이라는 클래스 가지고옴
ex)
import java.util.Arrays;
public class GetClassTest {
public static void main(String[] args) throws ClassNotFoundException {
//1. 클래스의 정보를 객체로부터 얻는 방법
Class re1 = new Person(1234L).getClass(); //객체에 대한 정보
System.out.println(re1.getName()); // 출력 : h_javaLang.Person
System.out.println(Arrays.toString(re1.getInterfaces())); //출력 : [interface java.io.Serializable]
//2. 클래스 리터럴로부터 얻는 방법
Class re2 = Person.class; // 반환타입이 Class
System.out.println(re2.getName()); // 출력 : h_javaLang.Person
System.out.println(Arrays.toString(re2.getInterfaces()));//출력 : [interface java.io.Serializable]
//3. 클래스명으로부터 얻는 방법
Class re3 = Class.forName("h_javaLang.Person"); // 패키지 이름 붙여야 함
System.out.println(re3.getName()); // 출력 : h_javaLang.Person
System.out.println(Arrays.toString(re3.getInterfaces())); //출력 : [interface java.io.Serializable]
}
}