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 ----------------------------------