1) 문자열은 일반적으로 char
배열과 문자열의 길이를 포함하는 객체입니다. 문자 배열은 일반적으로 16 비트 단어의 연속 배열로 구현되며, 각 배열에는 기본 바이트 순서로 유니 코드 문자가 포함됩니다.
2) 정수에 문자 값을 할당하면 16 비트 유니 코드 문자 코드가 동등한 정수로 변환됩니다. 따라서 U + 0063 인 'c'
은 0x0063
또는 99가됩니다.
3) 각 String
은 객체이므로 클래스 멤버 (예 : 클래스 설명자 단어, 잠금/세마포어 단어 등) 이외의 정보가 포함되어 있습니다.
ADENDUM
내용은 (각 객체와 관련된 고유의 오버 헤드를 결정한다)이 JVM 구현에 의존 오브젝트 및 클래스는 실제로 부호화하는 방법 (즉, 일부 라이브러리는 다른 것보다 더 효율적일 수있다).
예
객체 인스턴스 당 두 단어의 오버 헤드를 할당하는 전형적인 구현 (클래스 기술자/포인터, 및 세마포어/잠금 제어 워드); String
오브젝트는 길이가 int
이고 배열 참조가 char[]
입니다. 문자열의 실제 문자 내용은 제 2 대상물에 저장되고, 차례로 두 개의 단어를 분배 char[]
배열 플러스 배열 길이 워드 더한만큼 16- 비트 char
요소 문자열을 위해 필요에 따라 (플러스 불필요한 문자 문자열이 생성되었을 때 주위에 매달려있었습니다).
부칙 2
하나 문자가 하나 유니 코드 문자를 나타내는 경우 대부분의 경우에만 해당됩니다. 이것은 UCS-2 인코딩을 의미하고 2005 년 이전에는 true입니다. 그러나 지금까지는 유니 코드가 커졌고 문자열은 UTF-16을 사용하여 인코딩되어야합니다. 단 하나의 유니 코드 문자가 두char
을 Java String
에 사용할 수 있습니다.
Apache의 구현을위한 실제 소스 코드를 살펴보십시오. 에서 :
http://www.docjar.com/html/api/java/lang/String.java.html
당신은 그들이 정말 다른만큼, 각각의 질문에 다음을 깨는 고려해야한다. # 2는 여기에서 아마도 대답 할 수 있습니다 : http://stackoverflow.com/questions/1490218/utf-16-to-ascii-conversion-in-java –