A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

char c='中';
System.out.println(c);//输出中
char c2='AB';
System.out.println(c2);//报错
对于char存放两个字节,上面'中'和'AB'都是两字节,为什么前者能输出,后者报错呢?

16 个回复

倒序浏览
因为“中”这个汉字,在系统底层是二个字节存储的,所以可以输出。但是对于“AB”来说,虽然单独来看“A”“B”,两个英文字母分别都是一个字节,但是合在一起作为字符,就不能说是两个字节了,因为你一旦写入一个“A”,底层会分配两个字节的内存空间给他,“B”也同样是这样的,虽然他们本身都只有一个字节,但是char类型会给每个字母分配一个两字节的内存空间,因此,你合在一起写,就会报错

点评

回复给力  发表于 2015-8-23 11:04
回复 使用道具 举报 2 0
原来如此 学习了
回复 使用道具 举报
殷俊 发表于 2015-8-23 00:47
因为“中”这个汉字,在系统底层是二个字节存储的,所以可以输出。但是对于“AB”来说,虽然单独来看“A” ...

这个回答看起来中肯一点,不过我也不知道,算学习了
回复 使用道具 举报
当AB为字符时就是四个字节了。
回复 使用道具 举报
没太搞的明白,char 本来就是两个字节啊,一个A用char存也是两字节,一个A一个B肯定就是4字节啊,凭什么不报错。
回复 使用道具 举报
'AB'这不是单个字符,Ok
回复 使用道具 举报
楼上说的很对
回复 使用道具 举报
AB超出了字节范围,     当ASCILL编码表没有AB字符时候就会分开   A对应十进制是65B就是66加起来就是131   超出了字符范围
回复 使用道具 举报
boboyuwu 发表于 2015-8-23 11:13
AB超出了字节范围,     当ASCILL编码表没有AB字符时候就会分开   A对应十进制是65B就是66加起来就是131    ...

ASCILL编码表有'AB'这玩意吗   
回复 使用道具 举报
char 是用来存字符类型~ AB是一个字符串    char c2='AB'; 这句编译都不会通过的
回复 使用道具 举报
来学习了
回复 使用道具 举报
长见识了。。。我都没注意过、、、
回复 使用道具 举报
殷俊 发表于 2015-8-23 00:47
因为“中”这个汉字,在系统底层是二个字节存储的,所以可以输出。但是对于“AB”来说,虽然单独来看“A” ...

牛!!膜拜大神
回复 使用道具 举报
我也来看看大神怎么说
回复 使用道具 举报
对对的 是四个字节
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马