我遇到以下程序并显示意外的结果。Java问题:从字节序列创建字符串
public class StringFromByte
{
public static void main(String[] args)
{
byte bytes[] = new byte[256];
for(int i = 0; i < 256; i++)
bytes[i] = (byte)i;
String str = new String(bytes);
for(int i = 0, n = str.length(); i < n; i++)
System.out.print((int)str.charAt(i) + " ");
}
}
从技术上讲,这个程序应该按顺序打印从0到255的整数。但是如果你运行程序有时会显示这个序列(0到255),有时它会显示一些其他序列。它的行为没有指定。这是怎么回事?
我无法解释非确定性行为,但我确实看到一个问题。如果将int值超过127转换为一个字节,那么它实际上是一个负值,当返回到一个int时保持负值,因此即使这是确定性的,也不会返回0 - > 255打印出来。这甚至不涉及将随机字节投入字符串时发出的编码。 – rfeak