はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回はObjecクラスについて説明していきます。
Java記事のまとめはこちらです。
前回の記事は【Java開発】第25回 enumです。
Objectクラスとは?
ObjectクラスはすべてのJavaクラスの最高位親クラスです。
extendsキーワードで直接継承されていませんが、すべてのクラスはObjectクラスを継承しています。
なので、どんなクラスでもObjectクラスのメソッドを利用することができます。
Objectクラスの主なメソッド
〇toStringメソッド
ObjectクラスのtoStringメソッドは呼び出し元の情報を返還するメソッドです。
返還される情報は「クラス名@アドレス値のハッシュコード」です。
しかし、ほかのJavaAPIクラスはtoStringメソッドをオーバーライドして使うので、返還する情報が異なります。
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class ExcuteClass { public static void main(String[] args) { Object object1 = new Object(); int[] array = new int[5]; Test test = new Test(); List<Integer> integerList = new ArrayList<Integer>(); integerList.add(1); integerList.add(2); integerList.add(3); System.out.println(object1.toString()); System.out.println(array.toString()); System.out.println(test.toString()); System.out.println(integerList.toString()); } } class Test { int a; } |
上記のようにtoStringメソッドが存在されないクラスも
Objectクラスを継承しているので、toStringメソッドを使うことができます。
もちろん、配列もObjectクラスを継承しているので、toStringメソッドを使うことができます。
しかし、ListのようなJava APIクラスはObjectのメソッドをオーバーライドして使うので、返還する情報が異なります。
出力結果
1 2 3 4 |
java.lang.Object@7d6f77cc [I@5aaa6d82 practiceProject.Test@73a28541 [1, 2, 3] |
〇equalsメソッド
equalsメソッドは二つのインスタンスをアドレスを比較して同一なアドレスを参照しているかを検査するメソッドです。
equalsメソッドは基本的にインスタンスのアドレスのハッシュコードを比較して結果を判定します。
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class ExcuteClass { public static void main(String[] args) { Object val1 = new Object(); Object val2 = new Object(); String val3 = new String("A"); String val4 = new String("A"); System.out.println(val1.hashCode()); System.out.println(val2.hashCode()); System.out.println(val3.hashCode()); System.out.println(val4.hashCode()); System.out.println(); System.out.println(val1.equals(val2)); System.out.println(val3.equals(val4)); System.out.println(); val2 = val1; System.out.println(val1.toString()); System.out.println(val2.toString()); System.out.println(); System.out.println(val1.equals(val2)); } } |
他のクラスのhashCodeメソッドはインスタンスのメモリアドレスのハッシュコードを返還しますが、
Stringクラスは文字列の値のハッシュコードを返還するので、メモリアドレスが異なっても文字列の値が同一であるとequalsメソッドがtrueを返還します。
出力結果
1 2 3 4 5 6 7 8 9 10 11 12 |
758529971 2104457164 65 65 false true java.lang.Object@2d363fb3 java.lang.Object@2d363fb3 true |
〇finalizeメソッド
だれも参照しないインスタンスのデータを消すときに呼び出されるように約束されているメソッドです。
しかし、このメソッドを直接使うことよりGarbage Collectorがデータを削除するように置く方を推奨します。
なぜかというと、Javaではfinalizeメソッドが呼ばれた時、親クラスのfinalizeメソッドを呼び出しません。
なので、子供クラスのデータしか破壊され、親クラスのデータはメモリ上でそのまま存在する可能性があります。
上記のメソッド以外にもスレッドの運用のためのメソッドなどが存在しますが、今回の記事では扱いません。
以外のメソッドの詳細はこちらを参照してください。
終わりに
今回の記事は以上になります。
次回はLambdaを学びましょう。
ご覧いただきありがとうございます。
コメント