Object : 모든 클래스의 조상
(컴파일러가 자동으로 extends Object를 넣어서 상속함)
Equals : 내용이 동일한지 검사
== : 객체의 주소가 동일한지 검사
class Circle2 {
private int radius;
public Circle2(int radius) {
this.radius = radius;
}
@Override
public boolean equals (Object obj) {
if (obj instanceof Circle2) { // 자식으로 형변환이 가능하냐
Circle2 c1 = (Circle2) obj;
if(radius == c1.radius) return true;
}
return false;
}
}
public class java_16_p6 {
public static void main(String[] args) {
Circle2 obj1 = new Circle2(10);
Circle2 obj2 = new Circle2(10);
if(obj1 == obj2) System.out.println("2개의 원은 같습니다.");
else System.out.println("2개의 원은 같이 않습니다.");
if(obj1.equals(obj2)) System.out.println("2개의 원은 같습니다.");
else System.out.println("2개의 원은 같이 않습니다.");
}
}
🟢 equals를 오버라이딩하여 반지름이 같으면 true, 아니면 false 반환
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode()); // 16진수로
}
🟢 객체 정보를 출력(hashCode는 16진수로 출력)
🟢 왜 toString을 사용하지 않고 객체를 println해도 똑같은 값이 나올까?
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }객체를 넣었을 때, null이 아니라면 자동으로 toString()을 사용해주기 때문
🟢 toString 역시 오버라이딩을 통해 원하는 것을 출력시킬 수 있음
String : char 배열
🔴 ""로 생성했을 경우, 값이 같다면 같은 주소
🔴 new로 생성했을 경우, 각자 다른 주소
equals : 문자열 비교시 사용 (Object의 equals를 오버라이딩한 것)charAt(n) : 문자열의 인덱스 n에 해당하는 값을 가져옴indexOf(문자열) : 문자열에 괄호안의 문자열이 없으면 -1, 있으면 해당 인덱스 값(첫번째 인덱스 값) 반환length() : 문자열의 길이 반환trim() : 공백 잘라내기 (양 끝의)split() : 기준에 따라 문자열 분리valueOf() : 기본 타입값을 문자열로 전환 (static이기 때문에 클래스명으로 접근)