【Java】参照型の変数に対してFormatter.format()処理をするとどうなる??

Javaにおいて、参照型の変数を .format() メソッドでフォーマットしようとすると、その変数の toString() メソッドが呼び出された結果が文字列に挿入されます

つまり、参照型の変数が持つオブジェクトの文字列表現が挿入されることになります

具体的にはFormatter.format() メソッドを使って参照型の変数をフォーマットする際にはその変数が参照するオブジェクトの toString() メソッドが呼び出されて、その結果がフォーマットされた文字列に挿入されます

しかし…

Javaではオブジェクトのクラスが toString() メソッドを明示的にオーバーライドしていない場合、Object クラスから継承されたデフォルトの toString() メソッドが使用されます

具体的には..

具体的には、getClass().getName() + ‘@’ + Integer.toHexString(hashCode()) のような形式で文字列が生成されます
ここで、getClass().getName() はオブジェクトのクラス名を取得し、hashCode() はオブジェクトのハッシュコードを取得します

例えば、以下のようなクラスが toString() メソッドをオーバーライドしていない場合を考えてみましょう

public class MyClass {
    private int id;
    private String name;

    public MyClass(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // toString() メソッドを明示的にオーバーライドしていない
}

public class Main {
    public static void main(String[] args) {
        MyClass obj = new MyClass(1, "John");

        // MyClass は toString() をオーバーライドしていないため、Object クラスのデフォルトの実装が使用される
        String result = obj.toString(); 
        System.out.println(result);
    }
}

上記の実装だと、以下のように出力されます

MyClass@<16進数のハッシュコード>

ここで <16進数のハッシュコード> はオブジェクトのハッシュコードの16進数表現です
実際の出力はオブジェクトのクラス名である MyClass に @ が続き、その後ろにハッシュコードが表示されます

これは実装する際には注意しなくてはいけませんね…

参考になればと思います

ではっ

是非フォローしてください

最新の情報をお伝えします