我遇到以下程序並顯示意外的結果。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