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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周磊 中级黑马   /  2012-10-17 22:55  /  1729 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周磊 于 2012-10-17 23:15 编辑

public static void main(String[] args) {
                String s = "黑马GOOD";
                char a1 = '黑';
                char a2 = '马';
                char a3 = 'G';
                char a4 = 'O';
                char a5 = 'O';
                char a6 = 'D';
                System.out.println(s.getBytes().length);
        }
这样一段代码,上面的String只占用了8字节,而全部用Char则占用了12个字节,给我的感觉就是String内部还有部分采用ASCII表,大家研究下那个4个字节是怎么省下来的

还有是什么让他们区分是两个字节还是一个字节,比如为什么不会出现,把两个字母当成一个汉字输出,一个汉字当成了两个字母输出?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
本帖最后由 丁旭 于 2012-10-17 22:59 编辑

我刚发过一篇帖子,和你遇到的问题差不多。
其实就是讨论字符和字节的问题,可供您参考。
http://bbs.itheima.com/thread-28309-1-1.html
回复 使用道具 举报
字符串所占字节大小是根据他里面的内容而定 而基本数据类型所占大小已经指定了
char类型的 数据占2个字节
char a1 = '黑';
                char a2 = '马';
                char a3 = 'G';
只要定义了一个char 类型的变量且初始化了 就占2个字节
回复 使用道具 举报
曾浩 发表于 2012-10-17 23:02
字符串所占字节大小是根据他里面的内容而定 而基本数据类型所占大小已经指定了
char类型的 数据占2个字节
  ...

我知道是因为内容,但是是什么让他们区分是两个字节还是一个字节,这才是一个关键问题,比如为什么不会出现,把两个字母当成一个汉字输出,一个汉字当成了两个字母输出?
回复 使用道具 举报
是什么让他们区分是两个字节还是一个字节,比如为什么不会出现,把两个字母当成一个汉字输出,一个汉字当成了两个字母输出?
回复 使用道具 举报
怎么没有人啊?
回复 使用道具 举报
一个char是2个byte。所以是2*6字节的长度。s字符串的长度是内容所占字节的和:2*2+1*4个字节。
回复 使用道具 举报
楼上的观点我同意。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马