다음 프로그램에서 예기치 않은 결과가 나타났습니다.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