javaSystem.out.println()出力byte[]とchar[]異常の問題

3221 ワード

javaSystem.out.println()出力byte[]とchar[]異常の問題


今日突然誰かが私に彼の書いたbyte[]とchar[]を聞いて、Systemを使っています.out.println()出力時に得られる値に問題がありますか?
細思恐怖よ私はどうして気づかなかったの...........
くだらないことを言わないでコードは以下の通りです.
/**
 * @Author: 
 * @Date: 2019/1/9/00099:23
 * @Version 1.0
 */
public class arrayTest {
    public static void main(String[] args) {
        // byte 
        byte[] b = {'a'};
        // char 
        char[] c = {'a'};
        // System.out.println byte 
        System.out.println(b);//    [B@7adf9f5f
        // System.out.println char 
        System.out.println(c);//    a
    }
}

 
コードから分かるように、Systemを用いる.out.println()byte配列と出力char配列の違いは、
出力byte配列出力はメモリアドレス
出力char配列出力は配列の要素です
原因は何ですか???続いて下を見る.
資料を調べたらout.println()はprintStreamクラスのメンバーメソッドです.このメソッドでは、次のデータ型の出力リロード関数のみが提供されます.
--------------------------------------------------------------------------------------------------------------------
println()void戻り値なし区切り文字列を書き込むことで現在の行を終了
println(boolean x)voidは値を返さずにブール値を印刷し、行を終了します.
println(char x)voidは値を返さずに文字を印刷し、行を終了します.
println(char[]x)voidは値を返さずに文字配列を印刷し、行を終了します.
println(double x)voidは値を返さずに二重精度浮動小数点数を印刷し、行を終了する
println(float x)voidは値を返さずに単精度浮動小数点数を印刷し、行を終了する
println(int x)voidは値を返さずに整数を印刷し、行を終了する
println(long x)voidは値を返さずにlong整数を印刷し、行を終了する
println(Object x)voidは値を返さずにオブジェクトを印刷し、行を終了します.
println(String x)voidは値を返さずに文字列を印刷し、行を終了します.
-----------------------------------------------------------------------------------------------------------------------
以上からboolean、char、char[]、double、float、int、long、Stringタイプのデータを出力していることがわかります.
対応する値が出力され、Objectの出力に対してSystem.out.println()は、まずそのtoStringメソッドを呼び出し、その後、そのオブジェクトのtoStringメソッドの戻り値を出力します.
システムのせいでout.println()はint[]、String[]、byte[]、Object[]、出力関数をリロードしていません.このメソッドを使用してこれらのデータ型を出力すると、このメソッドのパラメータはすべてリロードされます.
配列の最初の要素として扱われます.つまりSystemです.out.println(b);Systemに等しいout.println(b[0]);次に、ヘッダ要素のtoStringメソッドを呼び出し、出力します.
 
---------------------------------- end ----------------------------------