char 유형은 C 또는 C++에서는 1바이트, Java에서는 2바이트를 차지합니다. char은 C나 C++에서 문자 변수를 정의하는 데 사용되며, char 데이터형은 정수형으로 1바이트만 차지한다. Java에서 char 유형은 Java 컴파일러가 기본적으로 유니코드 인코딩을 사용하므로 2바이트를 차지하므로 2바이트(16비트)가 모든 문자를 나타낼 수 있습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, Dell G3 컴퓨터.
Baidu에서 "char이 차지하는 바이트 수"를 검색한 결과 다음과 같은 답변을 얻었습니다.
Char는 C 또는 C++에서 문자 변수를 정의하는 데 사용되며 정수 유형이며 하나만 차지합니다. byte. , 값 범위는 -128 ~ +127(-27 ~ 27-1)입니다.
char 형식은 1바이트, 즉 8비트를 차지합니다. 저장할 수 있는 양의 정수는 0111 1111, 즉 127입니다.
분명히 이것은 우리가 원하는 결과가 아니기 때문에 "Java에서 char은 몇 바이트를 차지합니까?"라고 계속 검색했습니다.
Java에서 Char는 문자를 저장하는 데 사용되는 데이터 유형으로 2바이트를 차지합니다. , 유니코드 인코딩을 사용하는 경우 인코딩의 처음 128바이트는 ASCII와 호환되지만 일부 문자는 표현하는 데 두 개의 문자가 필요합니다.
C, C++ 및 Java의 문자가 차지하는 바이트 수가 다른 이유는 무엇입니까?
일부 문자를 표현하는 데 두 개의 문자가 필요하다는 것은 무엇을 의미하나요?
Coding
이 문제를 논의하기 전에 먼저 몇 가지 지식 포인트를 대중화하겠습니다.
우선, 우리 모두는 컴퓨터에 저장된 정보가 이진수로 표현된다는 것을 알고 있는데, 우리 인간이 사용하는 한자나 영어를 어떻게 컴퓨터에 저장하게 할 수 있을까요?
예를 들어 'a'를 이진수로 변환하여 컴퓨터에 저장하는 방법을 인코딩이라고 하고, 컴퓨터에 저장된 이진수를 분석하여 표시하는 것을
디코딩이라고 합니다.
문자 집합문자(Character)는 각종 국가 문자, 구두점, 그래픽 기호, 숫자 등을 포함한 다양한 문자 및 기호를 총칭하는 용어입니다. 문자 세트(Character set)는 여러 문자 세트의 집합이며, 각 문자 세트에는 서로 다른 문자 수가 포함됩니다. 일반적인 문자 세트 이름: ASCII 문자 세트, GB2312 문자 세트, BIG5 문자 세트 GB18030 문자 집합, 유니코드 문자 집합 등 바이두 백과사전에 나온 설명입니다. 어쨌든 문자 세트는 문자 집합의 종류가 다양하며, 문자 세트에 포함된 문자 수도 다릅니다. 컴퓨터가 다양한 문자 집합의 텍스트를 정확하게 처리하기 위해서는 컴퓨터가 다양한 텍스트를 인식하고 저장할 수 있도록 문자 인코딩이 필요합니다.
unicode그 이름은 유니코드(Unicode), 유니버셜 코드(Universal Code)라고도 불리며, 기호 수는 지속적으로 증가하여 100만개를 넘어섰습니다.
유니코드가 만들어지기 전에는 수백 가지의 인코딩 시스템이 있었습니다. 어떤 인코딩도 충분한 문자를 포함할 수 없습니다. 이름에서 알 수 있듯이 모든 기호에 대한 인코딩입니다. 각 기호에는 고유한 인코딩이 부여되므로 다른 인코딩으로 인해 발생하는 잘못된 코드 문제가 사라집니다.
대부분의 컴퓨터는 모든 대문자와 소문자, 숫자, 구두점 및 제어 문자를 나타내는 7비트 인코딩 방식인 ASCII(American Standard Code for Information Interchange)를 사용합니다. 유니코드에는 ASCII 코드가 포함되어 있으며 'u0000' ~ 'u007F'는 모두 128개의 ACSII 문자에 해당합니다.
힘이 있는 자만이 기준을 세울 수 있다는 생각을 지울 수 없습니다. 유니코드는 단지 기호 세트일 뿐이며 기호의 이진 코드만 지정합니다. 문자와 숫자 간의 매핑만 제공할 뿐 이 이진 코드를 저장하는 방법은 지정하지 않습니다. 우리는 영문자의 갯수가 매우 적어서 1바이트로 표현할 수 있다는 것을 알고 있지만, 유니코드의 중국어 기호의 갯수는 매우 커서 1바이트를 전혀 사용할 수 없습니다. 그 결과 나중에 UTF-8, UTF-16 등 유니코드 문자 저장을 위한 다양한 구현 방법이 등장했습니다. UTF-8은 인터넷에서 가장 널리 사용되는 유니코드 구현입니다.
내부 코드와 외부 코드우리는 종종 Java에서 char이 여러 바이트를 차지한다고 말하는데, Java의 내부 코드에서는 char이어야 합니다.
내부 코드는 Java가 실행될 때 메모리에 있는 문자 및 문자열의 인코딩 방법을 말하며, 외부 코드는 직렬화 기술과 같이 프로그램이 외부 세계와 상호 작용할 때 외부에서 사용되는 문자 인코딩입니다. 외부 코드는 다음과 같이 이해될 수 있습니다. 내부 코드가 아닌 한 외부 코드입니다. 소스코드 컴파일로 생성된 객체코드 파일(실행파일 또는 클래스파일)의 인코딩 방식은 외래코드에 속한다는 점에 유의하시기 바랍니다. JVM의 내부 코드는 UTF16을 사용합니다. UTF-16에서 16은 16비트의 최소 단위를 의미합니다. 즉, 2바이트가 1단위입니다. 초기에는 UTF16이 고정 길이 2바이트 인코딩을 사용하여 인코딩되었습니다. 2바이트는 65536개의 기호를 나타낼 수 있으며(실제로는 이보다 적을 수도 있음) 이는 당시 유니코드의 모든 문자를 표현하기에 충분했습니다. 그러나 유니코드의 문자 수가 증가함에 따라 UTF16에서는 2바이트 또는 4바이트를 사용하여 인코딩을 완료합니다. 이 상황을 처리하기 위해 Java는 향후 호환성 요구 사항을 고려하여 char 쌍을 사용하여 4바이트가 필요한 문자를 나타냅니다. 따라서 Java의 char은 2바이트를 차지하지만 일부 문자는 이를 표현하기 위해 2개의 문자가 필요합니다. 이는 일부 문자를 표현하기 위해 두 개의 문자가 필요한 이유를 설명합니다.
추가: Java의 클래스 파일은 UTF8을 사용하여 문자를 저장합니다. 즉, 클래스의 문자는 1~6바이트를 차지합니다. Java 직렬화 중에 문자도 UTF8로 인코딩되며 1~6자를 차지합니다.
length()
그럼 또 다른 질문이 있습니다. Java에서 문자의 String.length()는 무엇입니까?
이전 지식 포인트를 읽은 후 더 이상 입을 열 수 없으며 답이 있습니다. is 1... ...데모를 작성하고 살펴보십시오. 호랑이의 해에 Tiger를 사용하여 테스트하면 TigerUTF는 해당 유니코드 인코딩을 나타냅니다.
String tiger = "?"; String tigerUTF = "\uD83D\uDC05"; System.out.println(tigerUTF); System.out.println(tiger.length()); System.out.println(tiger.codePointCount(0,tiger.length()));
은 String.length()
得到的结果为2,表示的是stirng的char数组占UTF-16格式的2个代码单元(即4个字节),而不是有多少个字符。 当然我们想要获取多少个字符,可以使用codePointCount
메소드를 호출하여 얻을 수 있습니다.
관련 지식이 더 궁금하시다면 FAQ 칼럼을 방문해 주세요!
위 내용은 char 유형은 몇 바이트를 차지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!