6

このコードが数字を出力しない理由を誰か説明してもらえますか?

      String text = new String("SomeString");
      for (int i=0; i<1500; i++) {
                text = text.concat(i+"");
      }
      System.out.println(text);

結果

      SomeString

実行回数を 1000 に減らすとうまくいきますが、なぜでしょうか?! また、数字だけでなく文字も追加すると機能します。

新しいアップデート:

コード例をありがとう。私はそれらをすべて試しましたが、コンソール
には実際に数字が表示されますが、フォントカラーは白でしかないことがわかりました。しかし、文字列の最初の部分 SomeStringは黒です。

私は jdk1.7.0_06 を使用しています!

4

5 に答える 5

6

これはEclipseのバグです。固定幅のコンソールは出力を修正します。

于 2012-08-30T13:43:48.103 に答える
0

同じことをより効率的に行うには

  StringBuilder text = new StringBuilder("SomeString");
  for (int i = 0; i < 1500; i++) {
        text.append(i);
  }
  System.out.println(text);

どちらの例も、Java 6update32とJava7update3で機能します。

于 2012-08-30T13:05:42.427 に答える
0

うわー、これは変だ。同じ結果が得られました。一見、JVMのバグのように見えますが、コマンドラインからプログラムを実行してみたところ、正常に動作しました。Eclipseコンソールのバグである必要があります。コンソールを固定幅に変更すると、表示の問題が解決することがわかりました。

i + ""また、交換するとi + ","問題なく表示されることもわかりました。Eclipseコンソールは、純粋な数値を長く連続して伸ばすことについて、気に入らないことがあるようです。

    String text = "SomeString";
    for (int i = 0; i < 15000; i++) {
        // text = text.concat(i + "");  // Doesn't display correctly
        // text += i;                   // Doesn't display correctly
        text = text.concat(i + ",");    // Displays correctly
        // text += i + ",";             // Displays correctly
    }
    System.out.println(text);

このバグは私には少し心配です。良い発見!

更新:「xxxxxx」の長い行を印刷してみたところ、最大32000文字が正しく表示されることがわかりました。行が32001になると、表示されません。「12345」+「xxxxxxxxx...」を入力しても、32000個の「x」文字を表示できました。これは、行の長さが32000より長いことを意味するため、行の合計の長さとは関係ありません。Stringオブジェクトの部分の長さに関係しているようです。

于 2012-08-30T13:11:19.687 に答える
0

String.concat()はパラメーターを受け入れStringます。

「数字と文字」を追加すると、文字列が追加されます。これは、+オペレーターが文字列と数値データを連鎖していることを理解しているためです。

とにかく、コードは問題なく動作し、予想どおり 1499 まで番号が追加されました。

于 2012-08-30T13:03:57.340 に答える
0

あなたが試すことができることがいくつかあります。両方の例を挙げます。

まず、Java では単純に文字列を追加できます。次のようなプリミティブintは自動的に変換されます。

  String text = new String("SomeString");

  for (int i = 0; i < 1500; i++) {
            text += i;
  }

  System.out.println(text);

次に、最初の方法がまだ機能しない場合は、次のように明示的に変換してみてintくださいString

  String text = new String("SomeString");

  for (int i = 0; i < 1500; i++) {
            text += Integer.toString(i);
  }

  System.out.println(text);
于 2012-08-30T13:03:59.760 に答える