Java基础:char类型字节占用数
1. 前言
最近在研究InputStream、OutputStream和Reader、Writer这两大Java I/O输入输出抽象类。我们都知道对于InputStream、OutputStream是面向字节传输的(一次读取一个字节),对于Reader、Writer是面向字符传输(一次读取一个字符或者读取一行readline).在这其中我遇到了困惑,char类型到底是占用多少字节,因为在使用InputStream在read之后读取一个字节后转换成char之后,可以成功显示出正确的字符。但是由于网上以及Java编程思想这本书都提及Java中char是占用两个字节。所以本次博客就来详细探讨这个问题。
2. char类型字节占用数量
下面我们来看一下这个代码,来详细说明Java中char字节占用数量(其实和字符集编码和中文字符有关):
public class BytesOfChar {public static byte[] getBytesUTF8 (char c ) {Charset cs = Charset.forName("utf-8");CharBuffer cb = CharBuffer.allocate (1);cb.put (c);cb.flip ();ByteBuffer bb = cs.encode (cb);return bb.array();}public static byte[] getBytesGBK (char c) {Charset cs = Charset.forName("GBK");CharBuffer cb = CharBuffer.allocate (1);cb.put(c);cb.flip ();ByteBuffer bb = cs.encode (cb);return bb.array();}public static void main(String[] args) throws UnsupportedEncodingException {char c='a';char cc='中';String str="a";String strr="中";String s="a";System.out.println("编码为UTF8:");System.out.println("char值为英文字符所占字节长度:"+getBytesUTF8(c).length);System.out.println("char值为中文字符所占字节长度:"+getBytesUTF8(cc).length);System.out.println("编码为GBK(默认编码):");System.out.println("char值为英文字符所占字节长度:"+getBytesGBK(c).length);System.out.println("char值为中文字符所占字节长度:"+getBytesGBK(cc).length);System.out.println("-------------------------------");System.out.println("编码为UTF8");System.out.println("String为英文字母所占字节长度:"+str.getBytes("utf-8").length);System.out.println("String为中文字母所占字节长度:"+strr.getBytes("utf-8").length);System.out.println("编码为GBK:");System.out.println("String为英文字母所占字节长度:"+str.getBytes("GBK").length);System.out.println("String为中文字母所占字节长度:"+strr.getBytes("GBK").length);System.out.println("String为英文字母(全角)所占字节长度:"+s.getBytes("GBK").length);}
}运行结果:编码为UTF8:
char值为英文字符所占字节长度:1
char值为中文字符所占字节长度:3
编码为GBK(默认编码):
char值为英文字符所占字节长度:2
char值为中文字符所占字节长度:2
-------------------------------
编码为UTF8
String为英文字母所占字节长度:1
String为中文字母所占字节长度:3
编码为GBK:
String为英文字母所占字节长度:1
String为中文字母所占字节长度:2
String为英文字母(全角)所占字节长度:2
从运行结果中,我们可以看出char类型字节占用数量实际上和字符集编码以及中文字符以及是否是String中的字符有关。下面我们来总结一下这个运行结果:
2.1 UTF-8编码
在UTF-8编码的情况下(一句话概括就是英文字母一个字节,中文字母三个字节):
- char类型表示英文字母,占用1个字节
- char类型表示中文字母,占用3个字节
- String中英文字母,占用1个字节
- String类型中文字母,占用3个字节
2.2 GBK编码(默认编码)
在GBK编码的情况下(一句话概括就是无论英文字母还是中文字母都是2个字节,但是有一个特例在String类型中英文字母占用一个字节):
- char类型表示英文字母,占用2个字节
- char类型表示中文字母,占用2个字节
- String中英文字母,占用1个字节
- String类型中文字母,占用2个字节
Java基础:char类型字节占用数相关推荐
- Java基础—char类型数据
char类型介绍 char类型原本表示单个字符,但由于Unicode字符集扩充,导致有些字符需要使用两个char来描述 大小: 一个char类型占两个字节,16位 范围: 为十进制数 0 ~ 6553 ...
- Java基础题37:(单选题)java中char类型的取值范围是() A.0 ... 32767 B.0 ... 65535
37.(单选题)java中char类型的取值范围是() A.0 - 32767 B.0 - 65535 C.–256 - 255 D.–32768 - 32767 [正确答案]B [答案解析]在jav ...
- java char 计算_经典Java面试题之Java中Char类型的运算
经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...
- 杂记(1)java读取char类型2. 大小写字母的转换3. 字符串的拼接4. 一串数字排序
1. java读取char类型 应为java中没有nextchar();函数,所以只能先读取一行,即 Sting a=sc.nextline(); char need=a.charAt(0);//取字 ...
- java中char类型可以存储两个中文字符吗
java中char类型只能存储一个中文字符 https://www.cnblogs.com/lchzls/p/7071862.html https://blog.csdn.net/qq_4264294 ...
- Java中char类型数组打印数组名输出结果不是地址值
Java中其他类型数组打印数组名,输出结果都是内存地址 Java中char类型数组打印数组名,输出结果不是内存地址 char类型的数组就相当于一个字符串. 因为输出流System.out是PrintS ...
- Java中char类型占几个字节?
要想弄清楚char占用几个字节,就必须了解Unicode编码机制. 早在Unicode诞生之前,就已经有很多字符集,如美国的ASCII.表示西欧语言的ISO 8859-1.中国的GB18030等. 但 ...
- JAVA基础——基本类型
1.基本数据类型 整数类型:byte, short, int, long 浮点数类型:float, double 字符类型:char 布尔类型:boolean 不同数据类型占用的字节数不一样,假设一个 ...
- java中char类型_【考点】JAVA中的char类型
写在前面: 本周,在我们同学的刷题群里,一位同学上传了一道关于char的题,引起的不少同学的热议.热议的同时,我们也发现近乎一半的同学对char的基础知识一知半解,今天我们给大家一个浅显易懂的解释,赶 ...
最新文章
- 【 C 】字符串查找基础笔记
- java lazy loading_java – Spring,@Transactional和Hibernate Lazy Loading
- 在macOS搭建React Native for IOS开发环境
- 六. 异常处理7.throw:异常的抛出
- jQuery自定义选择器
- 2019蓝桥杯省赛---java---B---1(组队)
- 用的最多的正则表达式
- openlayer 图层上下_OpenLayers 3 的图层体系结构
- linux系统网络命令(六)
- (新手)使用pandas操作EXCEL
- 天线分类特征学习笔记(1)偶极子天线
- C# 单个按钮实现暂停或继续
- Win10 蓝屏0xc0000098修复
- 平板触控笔有哪些用途?超高性价比的触控笔推荐
- 元数据管理-技术元数据解决方案
- 20210212web04mysql多表,事务
- 《爱你就像爱生命》读后
- Win10激活提示“连接到internet激活windows”的最佳解决方法
- html点赞代码java_17种 HTML5字体图标点赞动画特效源码
- android购物车代码简述,Android实现简单购物车功能
热门文章
- ef entity转json引起的Self referencing loop
- studio-引入外来包
- 【原】移动web动画设计的一点心得——css3实现跑步
- 计算机视觉开源库OpenCV之利用开操作(Opening Operation)修复受损照片方法
- 2019世界机器人大赛总决赛在河北保定开赛
- Linux源代码编译安装详解
- 零基础Python学习路线图,小白的进阶之路!
- 使用Elasticsearch+filebeat+logstach+kibana构建日志服务平台
- python3.6.0怎么安装pip_python3.6环境安装+pip环境配置教程图文详解
- mysql concat 去掉重复_mysql - concat字段具有共同的重复密钥,并删除那些重复项,从而留下一个 - 堆栈内存溢出...