Java String (byte []) 생성자 (Java 6)의 의미를 이해하는 데 어려움을 겪고 있습니다. 결과 String 객체의 길이는 대개 틀립니다. 아마도 여기 누군가가 왜 이것이 의미가 있는지 설명 할 수 있습니다.바이트 배열로 구성된 Java 문자열의 길이가 잘못되었습니다.
import java.nio.charset.Charset;
public class Test {
public static void main(String[] args) {
String abc1 = new String("abc");
byte[] bytes = new byte[32];
bytes[0] = 0x61; // 'a'
bytes[1] = 0x62; // 'b'
bytes[2] = 0x63; // 'c'
bytes[3] = 0x00; // NUL
String abc2 = new String(bytes, Charset.forName("US-ASCII"));
System.out.println("abc1: \"" + abc1 + "\" length: " + abc1.length());
System.out.println("abc2: \"" + abc2 + "\" length: " + abc2.length());
System.out.println("\"" + abc1 + "\" " +
(abc1.equals(abc2) ? "==" : "!=") + " \"" + abc2 + "\"");
}
}
이 프로그램의 출력은 다음과 같습니다 :
abc1: "abc" length: 3
abc2: "abc" length: 32
"abc" != "abc"
문자열 바이트에 대한 문서는 [] 생성자 상태 "새로운 문자열의 길이
는 다음과 같은 작은 자바 프로그램을 고려 charset의 함수이며 따라서 바이트 배열의 길이와 같지 않을 수 있습니다. " 정말로 사실이며 US-ASCII 문자 세트에서 문자열 "abc"의 길이는 32가 아니라 3입니다.
이상하게도 abc2에 공백 문자가 없더라도 abc2.trim()은 동일한 문자를 반환합니다 문자열이지만 길이가 3의 올바른 값으로 조정되고 abc1.equals (abc2)가 true를 반환하는 경우 ... 명백한 내용이 누락 되었습니까?
예, 생성자에 명시적인 길이로 전달할 수 있음을 알고 있습니다. 기본 의미를 이해하려고합니다.
'bytes [3] '대신'bytes [2]'를 사용하셨습니까? –