java.lang
패키지에 위치하는 클래스
최상위 클래스
-> 상속 표현하지 않아도 자동으로 상속 가능
Object 클래스의 모든 멤버 다른 클래스에서 사용, 오버라이딩 가능
public boolean equals(Object o) {}
두 객체가 같은지 동등 비교 수행
-> 주소값이 같으면 true
, 다르면 false
리턴
객체가 가지는 멤버가 같은지 비교하고 싶으면 equals() 메서드를 오버라이딩 해서 각 객체의 멤버변수끼리 비교하도록 수정해서 사용
자바에서 제공하는 대부분의 클래스는 Object 클래스의 equals() 메서드를 오버라이딩 해놨기 때문에 객체 비교 가능
< equals() 메서드 자동 생성 단축어 >
Alt + Shift + S -> H
public static void main(String[] args) {
Person p1 = new Person("홍길동", 20);
Person p2 = new Person("홍길동", 20);
// 객체값 출력해보면 주소가 다르게 나옴
if(p1 == p2) {
System.out.println("두 객체의 주소값이 같다");
} else {
System.out.println("두 객체의 주소값이 다르다");
}
// 위에서 주소값 달랐으니까 당연히 다르다 출력됨
// 원래는 equals 쓰면 주소값 비교해서 다르다고 나오는데
// 얘는 지금 클래스 내에서 오버라이딩을 해놨기 때문에
// 주소값을 비교하는 게 아니라서 동등비교 연산자 사용했음
if(p1.equals(p2)) {
System.out.println("두 객체의 내용(멤버변수 값)이 같다");
} else {
System.out.println("두 객체의 내용(멤버변수 값)이 다르다");
}
// 이건 같다고 출력됨
}
class Person{
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
// 자동완성으로 오버라이딩한 equals() 메서드
// 이렇게 만들면 파라미터로 객체를 전달하면서
// 자동으로 Object 타입으로 업캐스팅이 됨
// 그러면 고유 멤버에는 접근이 불가능해지기 때문에 다시 다운캐스팅을 해야한다...
// 다운캐스팅할 때 instanceof 쓰면 더 편함...
if(obj instanceof Person) {
Person p = (Person)obj;
// 다운캐스팅!
if(name.equals(p.name) && jumin.equals(p.jumin)) {
return true;
// 다운캐스팅된 객체의 멤버변수랑 인스턴스 멤버변수 비교
// 문자열끼리 비교하는 거라서 String 클래스의 equals() 메서드 이용!
// 자동완성할 때 잘 보고 선택하기!!
}
}
}
}
- 리터럴 할당을 통해 생성하는 방법(일반적인 방법)
⭐ 입력
String s1 = "Hello";
String s2 = "Hello";
// 동등연산자로 주소값 비교하기
if(s1 == s2) {
System.out.println("s1과 s2는 주소값이 같다");
} else {
System.out.println("s1과 s2는 주소값이 다르다");
}
// equals() 메서드로 값 비교하기
if(s1.equals(s2)) {
System.out.println("s1과 s2의 내용이 같다");
} else {
System.out.println("s1과 s2의 내용이 다르다");
}
📌 출력
s1과 s2는 주소값이 같다
s1과 s2의 내용이 같다
- 일반적인 클래스 인스턴스 생성하는 방법(new 연산자 사용)
String s3 = new String("Hello");
String s4 = new String("Hello");
if(s3 == s4) {
System.out.println("s3과 s4는 주소값이 같다");
} else {
System.out.println("s3과 s4는 주소값이 다르다");
}
if(s3.equals(s4)) {
System.out.println("s3과 s4의 내용이 같다");
} else {
System.out.println("s3과 s4의 내용이 다르다");
}
📌 출력
s3과 s4는 주소값이 다르다
s3과 s4의 내용이 같다
public String toString() {}
어떤 객체의 정보를 문자열로 변환하여 리턴
기본적으로 Object 클래스의 toString() 메서드는 객체의 주소값을 문자열로 리턴하도록 정의되어 있음
객체 정보를 리턴하고 싶다면 toString() 메서드를 오버라이딩하여 멤버변수 값을 문자열로 결합하여 리턴해야 함
출력문 내 toString() 메서드 생략 가능
-> 참조변수명만으로 사용 가능
자바에서 제공하는 대부분의 클래스는 toString() 메서드 오버라이딩 되어 있기 때문에 객체에 저장된 값을 문자열로 리턴받을 수 있음
< toString() 메서드 자동 완성 단축키 >
Alt + Shift + S -> S
public static void main(String[] args) {
Person p = new Person("홍길동", 20, "031010-1234567");
System.out.println(p.toString());
System.out.println(p);
// 출력문에는 toString() 메서드 생략 가능함
}
class Person {
String name;
int age;
String jumin;
pulbic Person(String name, int age, String jumin) {
super();
this.name = name;
this.age = age;
this.jumin = jumin;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", jumin=" + jumin + "]";
}
}