Object-1

import java.lang.*;
above java.lang is declared automatically
Object class
object class is highest class in Java
all classes are automatically extends Object
메서드 설명
String toString() 객체를 문자열로 표현하여 반환합니다.
재정의 하여 객체에 대한 설명이나 특정 멤버 변수 값을 반환합니다.
boolean equals(Object obj) 두 인스턴스가 동일한지 여부를 반환합니다.
재정의하여 논리적으로 동일한 인스턴스임을 정의할 수 있습니다.
int hashCode() 객체의 해시 코드 값을 반환합니다.
Object clone() 객체를 복제하여 동일한 멤버 변수 값을 가진 새로운 인스턴스를 생성합니다.
Class getClass() 객체의 Class 클래스를 반환합니다.
void finalize() 인스턴스가 힙 메모리에서 제거될 때 가비지 컬렉터(GC)에 의해 호출되는 메서드 입니다.
네트워크 연결 해제, 열려 있는 파일 스트림 해제 등을 구현합니다.
void wait() 멀티스레드 프로그램에서 사용하는 메서드입니다.
스레드를  '기다리는 상태'(non runnable)로 만듭니다.
void notify() wait() 메서드에 의해 기다리고 있는 스레드(non runnable) 상태를
실행 가능한 상태(runnable)로 가져옵니다.
toString()
getClass().getName()+’@‘+Integer.toHexString(hashCode())
ToStringEx.java
package object;
class Book{
int bookNumber;
String bookTitle;
Book(int bookNumber, String bookTitle){
this.bookNumber=bookNumber;
this.bookTitle=bookTitle;
}
}
public class ToStringEx{
public static void main(String[[] args){
Book book1=new Book(200, "");
System.out.println(book1);
System.out.println(book1.toString();
}
}

object.Book@d716361

object.Book@d716361

toString re-definition
ToStringEx.java
package object;
class Book{
int bookNumber;
String bookTitle;
Book(int bookNumber, String bookTitle){
this.bookNumber=bookNumber;
this.bookTitle=bookTitle;
}
@Override
public String toString(){
return bookTitle+","+bookNumber;
}
}
public class ToStringEx{
public static void main(String[] args){
Book book1=new Book(200,"");
System.out.println(book1);
System.out.println(book1.toString());
}
}

개미,200

개미,200

equals()
논리적으로 같거나 물리적주소(메모리 주소)가 같으면 True 반환
EqualsTest.java
package object;
class Student{
int studentId;
String studentName;
public Student(int studentId,String studentName){
this.studentId=studentId;
this.studentName=studentName;
}
public String toString(){
return studentId+","+studentName;
}
}
public class EqualsTest{
public static void main(String[] args){
Student studentLee=new Student(100,"");
Student studentLee2=studentLee;
Student studentSang=new Student(100,"");
if(studentLee==studentLee2)
System.out.println("studentLee studentLee2 .");
else
System.out.println("studentLee studentLee2 .");
if(studentLee.equals(studentLee2))
System.out.println("studentLee studentLee2 .");
else
System.out.println("studentLee studentLee2 .");
if(studentLee==studentSang)
System.out.println("studentLee studentSang .");
else
System.out.println("studentLee studentSang .");
if(studentLee.equals(studentSang))
System.out.println("studentLee studentSang .");
else
System.out.println("studentLee studentSang .");
}
}

studentLee와 studentLee2의 주소는 같습니다.

studentLee와 studentLee2는 동일합니다.

studentLee와 studentSang의 주소는 다릅니다.

studentLee와 studentSang는 동일하지 않습니다.

StringEquals.java
package object;
public class StringEquals{
public static void main(String[] args){
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
/* after java9 cannot use Integar */
Integer i1=new Integer(100);
Integer i2=new Integar(100);
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
}
}
String 과 Integar 에서 재정의된 Equals 함수는
물리적 주소의 같음이 아닌 값의 같음을 검사함.
‘ == ‘ 가 주소의 동일함을 나타냄.
EqualsTest.java
package object;
class Student{
int studentId;
String studentName;
public Student(int studentId,String studentName){
this.studentId=studentId;
this.studentName=studentName;
}
public String toString(){
return studentId+","+studentName;
}
@Override
public boolean equals(Object obj){
if(obj instanceof Student){
Student std=(Student)obj;
if(this.studentId==std.studentId)return true;
else return false;
}
return false;
}
}
public class EqualsTest{
public static void main(String[] args){
Student studentLee=new Student(100,"");
Student studentLee2=studentLee;
Student studentSang=new Student(100,"");
if(studentLee==studentLee2)
System.out.println("studentLee studentLee2 .");
else
System.out.println("studentLee studentLee2 .");
if(studentLee.equals(studentLee2))
System.out.println("studentLee studentLee2 .");
else
System.out.println("studentLee studentLee2 .");
if(studentLee==studentSang)
System.out.println("studentLee studentSang .");
else
System.out.println("studentLee studentSang .");
if(studentLee.equals(studentSang))
System.out.println("studentLee studentSang .");
else
System.out.println("studentLee studentSang .");
}
}

studentLee와 studentLee2의 주소는 같습니다.

studentLee와 studentLee2는 동일합니다.

studentLee와 studentSang의 주소는 다릅니다.

studentLee와 studentSang는 동일합니다.

MyDateTest.java
package object;
class MyDate{
int day;
int month;
int year;
public MyDate(int day,int month,int year) {
this.day=day;
this.month=month;
this.year=year;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof MyDate) {
MyDate date=(MyDate)obj;
if(this.day==date.day && this.month==date.month && this.year==date.year)return true;
else return false;
}
return false;
}
}
public class MyDateTest{
public static void main(String[] args) {
MyDate date1=new MyDate(18,9,2004);
MyDate date2=new MyDate(18,9,2004);
System.out.println(date1.equals(date2));
}
}