Java中的char到底占几个字节

How Many Bytes does Char Occupy in Java
郄正元 2020-07-31 18:24:19 Java ${viewCount} ${commentCount}

毫无疑问,Java中的char固定占2个字节。请看源码:

/** * The number of bits used to represent a <tt>char</tt> value in unsigned binary * form, constant {@code 16}. * * @since 1.5 */ public static final int SIZE = 16; /** * The number of bytes used to represent a {@code char} value in unsigned binary * form. * * @since 1.8 */ public static final int BYTES = SIZE / Byte.SIZE; /** * The constant value of this field is the smallest value of type {@code char}, * {@code '\u005Cu0000'}. * * @since 1.0.2 */ public static final char MIN_VALUE = '\u0000'; /** * The constant value of this field is the largest value of type {@code char}, * {@code '\u005CuFFFF'}. * * @since 1.0.2 */ public static final char MAX_VALUE = '\uFFFF';

这四个常量是在char的包装类 Character 中定义的。

从其中可以看出,char占用的大小 SIZE 是16位,占用的字节数 BYTES 是2个字节。同时我们从最小值 MIN_VALUE 和最大值 MAX_VALUE 这两个常量中也可以看出,不论char的值是多少,它都固定占用2个字节。

Java中的char能表示所有的字符吗

两个字节最多能表示多少个字符呢?答案是 216=65536个。可是我们知道,世界上的字符数量远不止65536,那Java中的char能表示所有的字符吗?

答案是不能。

例如😄这个Emoji表情字符,在UTF-8编码中需要用4个字节来表示。所以以下Java代码在编辑器中是会报编译错误的:

char haha = '😄'; // Invalid character constant

也就是说,超出65536范围的其他字符,char就不支持了。

Java字符串中每一个字符都对应一个char吗

我们知道,Java中的 String 底层是用 char[] 实现的,即字符串是用char数组实现的。但是:

不是每一个字符都对应一个char。

例如:

System.out.println("😄".length()); // 结果为2 System.out.println("😄😄abc".length()); // 结果为7

这就是因为😄这个字符占用4个字节,需要用两个char来表示。

文章评论
${fromAuthor ? '郄正元' : '游客'} 作者 ${gmtCreate}
${content}
${subList.length}
发表评论
${commentToArticle ? '' : parentContent}
字数:0/${maxCommentLength}
该邮箱地址仅用于接收其他用户的回复提醒,不会泄露