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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈坚 中级黑马   /  2012-4-11 18:35  /  1782 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在c语言中,char china[]="china",它的字节是6个,而在java中
                      char china[]={'c','h','i','n','a'};
                 String str = new String(china);
                  byte[] bs = str.getBytes();
                  System.out.println(bs.length);//得到的结果是5
各位大侠解析一下,小弟不是很懂!

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

4 个回复

倒序浏览
一个字符在计算机中是一个字节,一个中文是计算机中是2个字节。
回复 使用道具 举报
黑马张平 发表于 2012-4-11 18:41
一个字符在计算机中是一个字节,一个中文是计算机中是2个字节。

我的问题不是这个,我的问题是char china[]="china"在c语言中占用了内存6个字节其中包含'\0',而在java中就不是很清楚有没有这样的情况。
回复 使用道具 举报
本帖最后由 葛尧 于 2012-4-11 19:02 编辑

C语言中 你没发现那是字符串么,字符串默认以\0结束的,所以是6

下面是是“字符型数组” 通过构造函数转成 新的“字符串”,然后再把“字符串”转成“byte[] 型数组”,然后打印的是这个byte[]数组的长度。。。china是5个字符,所以数组的长度就是5?。。
                                                                                                                       ↑这个过程,有必要把\0也给数组吗?(其实我也没有深究。。)

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
因为C语言把字符串字面量作为字符数组来处理。当C语言编译器在程序中遇到长度为n的字符串字面量时,
它会为字符串字面量分配长度为n+1的内存空间,在末尾增加一个额外的字符——空字符(\0)。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马