java中char类型是占两个字节的!也就是说定义 char='A'其实是占两个字节的,但是一个字

java中char类型是占两个字节的!也就是说定义char='A'其实是占两个字节的,但是一个字母只需要8位就能表示了,高位都是零么???那为什么system.out.p... java中char类型是占两个字节的!也就是说定义
char='A'其实是占两个字节的,但是一个字母只需要8位就能表示了,高位都是零么???那为什么system.out.println("AAA".getBytes().length)输出的是3,而system.out.println("哈哈哈".getBytes().length)输出的却是6,还是说英文字符占一个字节,汉子是两个字节。。。如果都是两个字节的话,InputStream每次能读取一个字节,假设文件中放的是字母,先读取低8位,然后读取高8位是不是就没有意义了呢???求解!想了很久很烦!
展开
 我来答
wwwzhangsan
2014-09-26 · TA获得超过286个赞
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:115万
展开全部
char类型的确是两个字节。
getBytes()方法的功能是使用系统默认字符集对字符串进行编码,返回字节数组。中文系统默认GBK编码。GBK兼容ASCII编码,就是说,127以内的字符和ASCII编码表一样一样滴。。
"AAA".getBytes()按照默认GBK编码返回的就是长度为3字节的数组,所以长度为3。
"哈哈哈".getBytes()按照默认GBK编码返回的就是长度为6字节的数组,因为每个汉字编码为2个字节。
使用InputStream从文件中读取时,也要看文件采用的是何种编码。根据编码将读入的字节进行解码才能得到正确的字符。
追问
既然字母和ASCII编码一样,那java中一个字母到底算一个字节还是两个字节???
追答
java中的char类型是两个字节。就是说,'A'和'哈'都各占2个字节。
getBytes()方法是获取编码后的字节数组。注意,是编码后,就是我前面说过的,默认采用GBK编码。
你可能要问,编码前咋存放啊?事实上,在JAVA语言中,字符都是使用UTF16编码存放的。
zhaobingguo94
2014-09-26 · TA获得超过700个赞
知道小有建树答主
回答量:148
采纳率:0%
帮助的人:53.4万
展开全部
Java中的char是两个字节的,字母的话也是高八位为0.
至于你说的问题,"AAA".getBytes() 这里"AAA"其实是作为String类型调用的,不是Char
你可以单独试一下char类型的。
我试了下下面的代码,希望对你有帮助。
import java.io.UnsupportedEncodingException;
public class TestChar{
public static void main(String[] args){
String str = "c";
char x = 'c';
byte[] bytes = null;
byte[] bytes1 = null;
try {
bytes = str.getBytes("utf-8");
bytes1 = charToByte(x);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println("bytes 大小: " + bytes.length);
//System.out.println(bytes1[1] + "\n" + bytes1[2] + "\n" + bytes1[3]);
System.out.println("bytes1 大小: " + bytes1.length);
System.out.println(bytes1[0] + "\n" + bytes1[1]);
}
public static byte[] charToByte(char c) {
byte[] b = new byte[2];
b[0] = (byte) ((c & 0xFF00) >> 8);
b[1] = (byte) (c & 0xFF);
return b;
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-09-26
展开全部
这个跟编码有关系,不同的编码getbytes不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风之独韵
2014-09-26 · TA获得超过1304个赞
知道小有建树答主
回答量:179
采纳率:89%
帮助的人:66.2万
展开全部
英文算一个字节,中文算两个字节,所以你读取它们的长度的时候就是3和6;inputStream读取的是字符,你用while循环读取,一个一个取出来,找到你所需要的。
追问
英文算一个字节??不是说java中只要是字符都占两个字节么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式