Java中char到底是多少字节?

貌似一个简单的问题(也许还真是简单的)但是却把曾经自认为弄清楚的我弄得莫名其妙char在Java中应该是16位byte在Java中应该是8个位charx='漆';//这样... 貌似一个简单的问题(也许还真是简单的)但是却把曾经自认为弄清楚的我弄得莫名其妙 char在Java中应该是16位 byte在Java中应该是8个位 char x = '漆'; //这样是合法的,输出也是16位 但是 String str = "漆'"; byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢? 3个byte一共是3*8=24个位,那么char x怎么又放得下?我坚信char是16个位,但是str.getBytes()这个东西到底又怎么回事?   展开
 我来答
小傻

推荐于2018-03-01 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

      java中的char占2个字节 

       1:“字节”是byte,“位”是bit ;

  2: 1 byte = 8 bit ;

  char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。

代码如下:

public class Test {
public static void main(String[] args) {
String str= "中";
char x ='中';
byte[] bytes=null;
byte[] bytes1=null;
try {
bytes = str.getBytes("utf-8");
bytes1 = charToByte(x);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("bytes 大小:"+bytes.length);
System.out.println("bytes1大小:"+bytes1.length);
}
public static byte[] charToByte(char c) { 
        byte[] b = new byte[2]; 
        b[0] = (byte) ((c & 0xFF00) >> 8); 
        b[1] = (byte) (c & 0xFF); 
        return b; 
    }
}

结果如下:

bytes 大小:3
bytes1大小:2

剪一束阳光给你
2015-09-21
知道答主
回答量:17
采纳率:0%
帮助的人:7.9万
展开全部
“字节”是byte,“位”是bit ; 1 byte = 8 bit ;
char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxd87612566
2011-08-25
知道答主
回答量:8
采纳率:0%
帮助的人:1.3万
展开全部
java是用unicode来表示字符,"我"这个中文字符的unicode就是2个字节。 String.getBytes(encoding)方法是获取指定编码的byte数组表示,通常gbk/gb2312是2个字节,utf-8是3个字节。如果不指定encoding则取系统默认的encoding。
但在Unicode中确实都是2个字节 16位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pan017
2011-08-24 · TA获得超过732个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:93.7万
展开全部
这个要跟操作系统的默认字符集有关系的哦,Unicode的话确实是2个字节,但是有时候会由于各种原因而发生改变,变为UTF-8之类的可能就会蹦出3个字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rhovf681rxf
推荐于2017-11-24 · TA获得超过528个赞
知道小有建树答主
回答量:908
采纳率:0%
帮助的人:469万
展开全部
Java中无论是汉字还是英文字母都是用Unicode编码来表示的,一个Unicode码是16位,每字节是8位,所以一个Unicode码占两字节。但是英文字母比较特殊,源自于8位(1字节)的ASCII吗,于是在Unicode码仅使用了低8位(1字节)就可以表示,高8位的话不使用也无所谓。所以

char c='a';
System.out.println(c.getBytes().lenth()),得到的是1(字节)

但汉字就完整地使用了16位(2字节)的Unicode,所以
char c='中';
System.out.println(c.getBytes().lenth()),得到的是2(字节)

综上,c='a'在内存中确实只占1字节,但这不意味着String s="abc"在内存中只占3字节。应该这么说,String s="abc"至少在内存中占3字节。这是因为char是基本数据类型,而String确是对象类型。对象是一种很复杂的数据类型,你要看一个对象具体占多少字节,可以把这个对象序列化后存入一个文本文件来看它具体占用了多少字节,当然这也不是精确的,因为序列化需要写入少量系统信息,但大致是对的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式