java char

char在Java中应该是16个字节 
byte在Java中应该是8个字节 
char x = '编'; //这样是合法的,输出也是16个字节 


但是 
String str = "编"; 
byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢? 
3个byte一共是3*8=24个bit,那么char x怎么又放得下?我坚信char是16个字节, 
但是str.getBytes()这个东西到底又怎么回事?


byte[] bytes = str.getBytes();之后是3个字节,这里和前面的概念不一样。java是用unicode来表示字符,"编"这个中文字符的unicode就是2个字节。
String.getBytes(encoding)方法是获取指定编码的byte数组表示,通常gbk/gb2312是2个字节,utf-8是3个字节。
如果不指定encoding则取系统默认的encoding.
要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 作为 encoding。unicode 4.0 标准包含从 U+0000-U+FFFF 
的基本多语言平面和 U+10000-U+10FFFF 的扩展平面的文字,这是 code point。Java 的 char 类型是 16 bit 的,所以单个 char 只支持基本平面内的文字,
而扩展平面的文字是由一对 char 来表示的。 
### Java 中 `char` 类型的详解及使用方法 Java 中的 `char` 是一种基本数据类型,用于表示单个字符。它与 Unicode 编码直接关联,并且占用 16 位(2 字节)的内存空间,可以表示从 `\u0000` 到 `\uFFFF` 的字符范围[^3]。这使得 `char` 类型能够支持多种语言的文字和符号。 #### 定义和初始化 在 Java 中,`char` 类型变量可以通过以下几种方式进行定义和初始化: ```java char ch1 = 'A'; // 直接赋值一个字符 char ch2 = '\u039A'; // 使用 Unicode 转义序列 char ch3 = 65; // 使用 ASCII 码值(注意:这是 int 类型隐式转换为 char) ``` 需要注意的是,当使用整数来初始化 `char` 变量时,必须确保该整数值落在 `char` 类型的有效范围内(即 0 至 65535),否则会导致编译错误或运行时异常。 #### 字符数组 `char` 类型也可以用来创建数组,以存储多个字符: ```java char[] charArray = {'J', 'a', 'v', 'a'}; ``` 这样的数组常被用于处理字符串或者进行底层的数据操作。 #### 特殊字符和转义序列 对于某些特殊字符,如换行符、制表符等,可以使用转义序列表示。此外,任何 Unicode 字符都可以通过 `\u` 后跟四位十六进制数的形式表示: ```java char newline = '\n'; // 换行符 char tab = '\t'; // 制表符 char omega = '\u03A9'; // 希腊字母 Omega ``` 这些转义序列不仅便于输入难以直接键入的字符,而且保证了跨平台的一致性。 #### 包装类 Character 虽然 `char` 是一种基本数据类型,但在需要对象的地方,比如集合框架中,就需要用到其对应的包装类 `Character`。这个类提供了许多实用方法来操作 `char` 值,例如判断是否是数字、字母等: ```java Character chObj = new Character('B'); boolean isDigit = Character.isDigit('5'); // 返回 true ``` #### Unicode 支持 Java 的 `char` 类型基于 Unicode 标准设计,这意味着它可以表示全球几乎所有的书写系统中的字符。每个 `char` 值实际上对应了一个特定的 Unicode 码点,这允许开发人员编写国际化应用程序而无需担心字符集问题[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值