私は次のプログラムに遭遇し、予期せぬ結果を示しました。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)が表示されることがあります。その動作は不特定である。どうしたの?
私は非決定論的な動作を説明することはできませんが、私は1つの問題が表示されます。 127以上のint値を1バイトにキャストすると、実際には負の値になり、intにキャストバックしたときに負の値が残るため、確定的であっても0〜255の値が返されません。これはランダムなバイトを文字列に投げ込むことに伴う発行されたエンコーディングには対処しません。 – rfeak