1. Object클래스
1) Object 클래스
- 모든 클래스의 최고 조상, 오직 11개의 메서드만을 가지고 있다.
- notify(), wait() 등은 쓰레드와 관련된 메서드이다.
ex)
public boolean equals(Object obj) : 객체 자신과 객체 obj가 같은 객체인지 알려준다.
public Class getClass() : 객체 자신의 클래스 정보를 담고 있는 Class인스턴스를 반환한다.
public String toString() : 객체 자신의 정보를 문자열로 반환한다.
2) equals(Object obj)
- 객체 자신(this)과 주어진 객체(obj)를 비교한다. 같으면 true, 다르면 false
- Object클래스의 equals()는 객체의 주소를 비교(참조변수 값 비교)
ex)
class Value {
int value;
Value(int value) {
this.value = value;
}}
class Ex9_1 {
pulibc static void main(String[] args) {
Value v1 = new Value(10);
Value v2 = new Value(10);
System.out.println(v1.equals(v2));
} }
v1 == v2 -> 0x1234 == 0x2345 -> false
3) equals(Object obj)의 오버라이딩
- 인스턴스 변수(iv)의 값을 비교하도록 equals()를 오버라이딩해야 한다.
4) hashCode()
- 객체의 해시코드(hash code)를 반환하는 메서드 // 객체의 지문
- Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
ex)
public calss Object {
public native int hashCode(); //네이티브 메서드: OS의 메서드(씨언어)
}
- equals()를 오버라이딩하면, hashCode()도 오버라이딩해야 한다.
- equals()의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문
ex)
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equlas(str2)); // true
System.out.println(str2.hashCode()); // 96354
System.out.println(str1.haseCode()); // 96354
- System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일
5) toString(), toString()의 오버라이딩
- toString() : 객체를 문자열(String)으로 변환하기 위한 메서드
public String toString() {
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
6) String 클래스 -> 문자열을 다루기 위한 클래스
- String 클래스 = 데이터(char[]) + 메서드(문자열 관련)
- 내용을 변겅할 수 없는 불면(immutable) 클래스
7) 문자열의 비교
- String str = "abc"와 String str = new String("abc"); 의 비교
ex)
String str1 = "abc"; // 문자열 리터럴 "abc"의 주소가 str1에 저장됨
String str2 = "abc"; // 문자열 리터럴 "abc"의 주소가 str2에 저장됨
String str3 = new String("abc"); // 새로운 String인스턴스를 생성
String str4 = new String("abc"); // 새로운 String인스턴스를 생성
str1,str2는 객체는 하나이고 str1,2의 같은 주소에서 하나의 객체에 연결된 반면에
str3, str4는 새로운 객체를 생성했기 때문에, 주소도 다르고 서로 다른 객체를 가지고 있다.
8) 문자열 리터럴
- 문자열 리터럴은 프로그램 실행시 자동으로 생성된다. (constant pool에 저장 / 상수저장소)
ex)
class Ex9_7 {
public static void main(String args[]) {
String s1 = "AAA";
String s2 = "AAA";
String s3 = "AAA";
String s4 = "BBB";
}}
- 같은 내용의 문자열 리터럴은 하나만 만들어진다.
내용을 변경할 수 없으니까 하나의 문자열을 여러 개의 참조변수가 공유함
9) 빈 문자열( "" , empty string)
- 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
String str = ""; // str을 빈 문자열로 초기화
- 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능
char[] chArr = new char[0]; // 길이가 0인 char배열
int [] iArr = {}; // 길이가 0인 int 배열
- 문자(char)와 문자열(String)의 초기화
String s = "";
char c = '';
10) join()과 StringJoiner
- join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.
ex)
String aninals = "dog,cat,bear";
String [] arr = animals.split(","); // 문자열을 ',' 를 구분자로 나눠서 배열에 저장
String str = String,join("-",arr); // 배열의 문자열을 '-' 로 구분해서 결합
System.out.println(str); // dog-cat-bear
'JAVA' 카테고리의 다른 글
JAVA #18 객체의 생성과 사용 (0) | 2021.06.20 |
---|---|
java #17 Object 클래스 총 정리 2(StringBuffer, StringBuilder ,Math 클래스, 래퍼 클래스) (0) | 2021.05.26 |
java #15 와일드 카드, 지네릭 메서드 (0) | 2021.05.23 |
java #14 쓰레드 총 정리 2 (데몬 쓰레드, 쓰레드 동기화) (0) | 2021.05.22 |
java #13 쓰레드 총 정리 1 (싱글쓰레드, 멀티쓰레드, main쓰레드) (0) | 2021.05.20 |