◎ ob1과 ob1.toString()의 출력값이 같은 이유는
객체를 출력하면 기본적으로 to.String() 메소드가 호출되기 때문
그래서 ob1만 출력해도 기본적으로 to.String()메소드가 호출되어 결국 같은 해시코드 값이 출력
▼ Test128
class Test
{
private int a = 10;
public void write()
{
System.out.print("a : " + a);
}
}
public class Test128
{
public static void main(String[] args)
{
Test ob1 = new Test();
Test ob2 = new Test();
System.out.println("10 == 9 : " + (10 == 9));
//--==>> 10 == 9 : false
int a = 10;
int b = 10;
System.out.println("a == b : " + (a == b));
//--==>> a == b : true
// ※ 『==』 비교 연산자는 피연산자의 크기를 비교함을 확인(관찰)
System.out.println("ob1 == ob2 : " + (ob1 == ob2));
//--==>> ob1 == ob2 : false
// ※ 객체(Object)들을 비교하는 과정에서 사용하는 『==』 연산자는
// 크기를 비교하는 것이 아니라 대상 객체의 주소를 비교
System.out.println();
System.out.println("-----------------------------------------------------------------");
System.out.println();
System.out.println("ob1 : " + ob1);
System.out.println("ob1.toString() : " + ob1.toString());
//--==>> ob1 : Test@15db9742
// ob1.toString() : Test@15db9742
System.out.println("ob2 : " + ob2);
System.out.println("ob2.toString() : " + ob2.toString());
//--==>> ob2 : Test@6d06d69c
// ob2.toString() : Test@6d06d69c
// 『클래스명@해시코드』
// ※ 해시코드(hashcode)
// : 자바 내부적으로 객체를 구분하기 위해 사용하는 것.
// 메모리의 주소값으로 생각하면 절대로 안된다.
// ※ 객체가 같으면 hashcode(해시코드)가 같지만
// hashcode(해시코드)가 같다고 해서 같은 객체는 아니다.
}
}
▼ Test129
class NewCar
{
private int velocity; //-- 자동차의 속도
private int wheelNum; //-- 자동차의 바퀴 갯수
private String carName; //-- 자동차의 이름
NewCar(int speed, String name, int wheel) // 생성자
{
velocity = speed;
carName = name;
wheelNum = wheel;
}
}
public class Test129
{
public static void main(String[] args)
{
//NewCar nCar1 = new NewCar(); // 작성한 구문은 매개변수 없는 생성자가 없으므로 해당 구문은 에러
NewCar nCar1 = new NewCar(250, "벤츠", 4);
NewCar nCar2 = new NewCar(150, "아우디", 4);
// equals()
System.out.println("1-1 : " + nCar1.equals(nCar2));
System.out.println("1-2 : " + (nCar1 == nCar2));
//--==>> 1-1 : false //-- 객체의 주소값으로 비교
// 1-2 : false
NewCar nCar3 = nCar1; //-- 객체 복사 → 얕은 복사(참조형) → 주소값 복사
System.out.println("2-1 : " + nCar1.equals(nCar3));
System.out.println("2-2 : " + (nCar1 == nCar3));
//--==>> 2-1 : true
// 2-2 : true
// toString()
System.out.println("3-1 : " + nCar1.toString());
System.out.println("3-2 : " + nCar2.toString());
System.out.println("3-3 : " + nCar3.toString());
//--==>> 3-1 : NewCar@15db9742 // 16진수 형태
// 3-2 : NewCar@6d06d69c
// 3-3 : NewCar@15db9742
// hashCode()
System.out.println("4-1 : " + nCar1.hashCode());
System.out.println("4-2 : " + nCar2.hashCode());
System.out.println("4-3 : " + nCar3.hashCode());
//--==>> 4-1 : 366712642 // 10진수 형태
// 4-2 : 1829164700
// 4-3 : 366712642
//-- 결과값을 16진수 형태로 바꾸게 되면
// 『toString()』메소드가 반환한 결과값 확인 가능.
// getClass()
System.out.println("5-1 : " + nCar1.getClass());
System.out.println("5-2 : " + nCar2.getClass());
System.out.println("5-3 : " + nCar3.getClass());
//--==>> 5-1 : class NewCar
// 5-2 : class NewCar
// 5-3 : class NewCar
//-- 생성된 객체를 통해
// 해당 객체의 기반 설계도(클래스)를 확인할 수 있는 기능을 가진 메소드.
// clone() //-- 객체 기반
// finalize() //-- 객체 직렬화
// 기타 나머지 메소드는 스레드 처리와 관련이 있다.
}
}