-->

的Java的System.out.println()奇怪的行为很长的字符串(java System.

2019-09-21 23:22发布

有人能解释我为什么这个代码不打印的数字?

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

结果

      SomeString

如果我降低运行次数为1000它的工作原理,为什么? 并且如果我不仅增加了许多,而且一个字符,它的工作原理。

确定新的更新:

感谢您的代码示例。 我尝试所有这些,但我发现就是,控制台
实际显示的数字,但只有在FONTCOLOR白色。 但是字符串的第一部分SomeString是黑色的。

我用jdk1.7.0_06!

Answer 1:

这是日食的bug。 固定宽度的控制台固定输出。



Answer 2:

String.concat()接受一个String参数。

如果加上“数字和字符”你是因为添加一个字符串+运营商了解您链接字符串和数字数据。

反正代码运行没什么问题,直到追加1499号如预期。



Answer 3:

有一对夫妇的事情,你可以试试。 我给你们俩的一个例子。

首先,在Java中,你可以简单地添加字符串连接在一起。 基元如int应自动转换:

  String text = new String("SomeString");

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

  System.out.println(text);

其次,如果第一种方法仍无法为你工作,那么你可以尝试将您的显式转换intString ,像这样:

  String text = new String("SomeString");

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

  System.out.println(text);


Answer 4:

做同样的更有效

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

这两个例子都为我工作在Java 6更新32和Java 7更新3。



Answer 5:

哇,这是奇怪的。 我得到了相同的结果。 乍一看,它看起来像在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对象的部分的长度做。



文章来源: java System.out.println() strange behavior long string