Java中的char到底占几个字节
How Many Bytes does Char Occupy in Java
毫无疑问,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来表示。