1

私はJavaが初めてです。以下のプログラムを正常に実行しましたが、出力がわかりません。これがプログラムです。

public class StringBufferCharAt {
    public static void main(String[] args)
    {
        StringBuffer sb = new StringBuffer("abcdefghijklmnopqrstuvwxyz");
        System.out.println("Length of sb : " + sb.length());

        int start = 0;
        int end   = 10;

        char arr[] = new char[end - start];
        sb.getChars(start, end, arr, 0);
        System.out.println("After altering : "+ arr.toString());

    }
}

このプログラムを実行した後: 次の出力が得られました。

Length of sb : 26
After altering : [C@21a722ef

私の質問:

  1. 出力に 10 文字ではなく、なぜ 11 文字なのか。
  2. sb 内にある元の文字 "abcdefghij" を印刷する代わりに、他の文字を取得したのはなぜですか。
4

6 に答える 6

4

最後の文のarr.toString()は、オブジェクトの文字列値を提供しています (doc here )。これは配列です。おそらく達成しようとしてArrays.toString(arr)いたのは、配列の内容を出力するようなものでした(doc)。

于 2011-12-11T06:35:20.913 に答える
2

出力が 11 文字である理由と、これらの文字の意味は何ですか?

char[]で指定されている の文字列表現Object#toString()が 11 文字であるの[Cはたまたまです。JavaDoc が述べているように、char[]@

このメソッドは、次の値に等しい文字列を返します。

getClass().getName() + '@' + Integer.toHexString(hashCode())

Class#getName()"C["char配列を返し、デフォルトのhashCode()実装は(一般に)メモリ内のオブジェクトのアドレスを返します。

これは通常、オブジェクトの内部アドレスを整数に変換することによって実装されますが、この実装手法は Java™ プログラミング言語では必要ありません。


これはどのように解決する必要がありますか?

配列の内容を印刷したい場合は、次を使用しますArrays.toString()

// Instead of this:
System.out.println("After altering : "+ arr.toString());
// Use this:
System.out.println("After altering : "+ Arrays.toString(arr));
于 2011-12-11T06:34:08.173 に答える
1

次のような最終的な印刷ステートメントが必要です。

System.out.println("After altering : "+ new String(arr));

また

System.out.println("After altering : "+ java.util.Arrays.toString(arr));

出力

For 1st case: abcdefghij
For 2nd case: [a, b, c, d, e, f, g, h, i, j]

注: 新しいArrays.toString(arr)`arr.toString()を作成する必要があるのは、配列の内容を出力しないためです。`String object from char array like in my answer above or call

于 2011-12-11T06:36:31.473 に答える
0

Java の配列には、「人間が読める」toString() 実装が組み込まれていません。表示されるのは、配列のメモリ位置から派生​​した標準出力です。

char[] を印刷可能なものに変換する最も簡単な方法は、そこから文字列を作成することです。

System.out.println("After altering : " + String.valueOf(arr));
于 2011-12-11T06:36:07.653 に答える
0

この式は、 ;の内容を使用して a を String にarr.toString()変換しません。これは、オブジェクト (この場合は配列オブジェクト) の表現を出力するデフォルトの方法を使用します。あなたが望むのは、 を使用して文字を String に変換するか、または を使用して文字の配列表現に変換することです。char[]char[]Object.toString()new String(arr)Arrays.toString(arr)

于 2011-12-11T06:39:26.077 に答える
0

私が答えることができるこの質問の一部は #1 です。開始変数と終了変数はインデックスであるため、11 文字が返されます。0 は有効なインデックスなので、0 から 10 までの 11 の異なる数字があります。

于 2011-12-11T06:42:46.627 に答える