当前位置: 首页 > 面试题库 >

Java中String的字符编码是什么?

慎俊雄
2023-03-14
问题内容

我实际上对Java中字符串的编码感到困惑。我有一些问题。如果您知道答案,请帮助我:

1)内存中Java字符串的本地编码是什么?当我String a = "Hello"以哪种格式书写时,它将被存储?由于Java与机器无关,因此我认为系统不会进行编码。

2)我在网上读到“ UTF-16”是默认编码,但我感到困惑,因为我写的时候说int a = 'c'我得到了ASCII表中的字符编号。那么ASCII和UTF-16是否相同?

3)另外,我不确定字符串在内存中的存储方式取决于:操作系统,语言?


问题答案:

1)字符串是对象,通常包含char数组和字符串的长度。字符数组通常实现为一个连续的16位字数组,每个字都包含一个以本机字节顺序排列的Unicode字符。

2)将字符值分配给整数会将16位Unicode字符代码转换为等效的整数。因此'c',U + 0063变为0x0063或99。

3)由于每个String对象都是对象,因此它包含除其类成员以外的其他信息(例如,类描述符词,锁/信号量词等)。

附录
对象的内容取决于JVM的实现(它确定与每个对象相关的固有开销)以及类的实际编码方式(即,某些库可能比其他库更有效)。

示例
一个典型的实现将为每个对象实例分配两个字的开销(用于类描述符/指针和一个信号灯/锁控制字);一个String对象还包含一个int长度和一个char[]数组引用。字符串的实际字符内容存储在第二个对象(char[]数组)中,该对象又分配了两个单词,再加上一个数组长度的单词,再加上char该字符串所需的16位元素(加上在创建字符串时保持闲置状态)。

附录2 仅在大多数
情况下, 一个 字符代表 一个
Unicode字符的情况才成立。这意味着UCS-2编码,并且在2005年之前适用。但是到现在为止,Unicode变得更大了,并且必须使用UTF-16编码字符串-a,单个Unicode字符在Java中可能使用
两个 char s String

查看Apache实现的实际源代码,例如: http
//www.docjar.com/html/api/java/lang/String.java.html


 类似资料:
  • 本文向大家介绍什么是Java String文字?,包括了什么是Java String文字?的使用技巧和注意事项,需要的朋友参考一下 在Java编程中广泛使用的字符串是字符序列。在Java编程语言中,字符串被视为对象。Java平台提供String类来创建和操作字符串。 您也可以直接创建一个字符串作为- 字符串文字应使用双引号引起来。每当在代码中遇到字符串文字时,编译器都会创建一个String对象,其

  • 每个人都在谈论密码中的填充方案,但需要传递给密码的实际字符串是什么?我不在乎它们是对称的还是不对称的,我只想要一个可能值的列表。

  • Windows中使用的默认unicode字符编码是什么?特别是在Windows编程中(Win32和WinRT)。当我在WinAPI中编程时,“char”映射到1字节字符存储,“wchar_t”映射到2字节字符存储。如果UTF-16用4个字节编码所有超过65536的字符,那么Windows如何将这些字符映射为“wchar_t”数据类型?我知道我的问题不够清楚,但我希望你能理解我的一些担忧。非常感谢!

  • 我有一个Java(Java 7)程序,使用带有属性文件的i18n,但我不能插入表情符号或其他“非普通”字母,因为Java打印

  • Java中的String是什么,我应该在什么时候使用它,为什么?