Java中的 char 与 byte的关系
先说结论,和c++、c完全不同,不能理解为一个char就是一个byte。 不过java其实也不需要关心到底分配了多少内存,只用String就能避免谈论byte(很少情况直接拿出byte【】来用!)
直接看代码:
public static void main(String[] args) throws IOException { // Character.MAX_CODE_POINT String zhongWen = "中中中国国国"; char[] chars = new char[zhongWen.length()]; System.out.println(chars.length); zhongWen.getChars(0, zhongWen.length(), chars, 0); for (char aChar : chars) { System.out.printf("%c", aChar); } System.out.println(); byte[] bytes = zhongWen.getBytes("GBK"); byte[] bytes1 = zhongWen.getBytes("UTF-8"); byte[] bytes2 = zhongWen.getBytes("UNICODE"); System.out.println(bytes.length); for (byte aByte : bytes) { System.out.printf("[ %x ] ", aByte); } System.out.println(); System.out.println(bytes1.length); for (byte aByte : bytes1) { System.out.printf("[ %x ] ", aByte); } System.out.println(); System.out.println(bytes2.length); for (byte aByte : bytes2) { System.out.printf("[ %x ] ", aByte); } System.out.println(); }
用char数组可以存中文!但是如果想获得对应的byte数组,根据编码的不同,同一个char【】对应的byte【】的长度是不同的!
运行结果:
可以上网搜索对应的编码查询器:
唯一一些不同就是中unicode生成的byte数组中,前面多了两个Byte的信息,其实是big endian的标志。
上一篇:
IDEA上Java项目控制台中文乱码