黑马程序员技术交流社区

标题: 有趣的Stringt和Char [打印本页]

作者: 周磊    时间: 2012-10-17 22:55
标题: 有趣的Stringt和Char
本帖最后由 周磊 于 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个字节是怎么省下来的

还有是什么让他们区分是两个字节还是一个字节,比如为什么不会出现,把两个字母当成一个汉字输出,一个汉字当成了两个字母输出?
作者: 丁旭    时间: 2012-10-17 22:58
本帖最后由 丁旭 于 2012-10-17 22:59 编辑

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

我知道是因为内容,但是是什么让他们区分是两个字节还是一个字节,这才是一个关键问题,比如为什么不会出现,把两个字母当成一个汉字输出,一个汉字当成了两个字母输出?
作者: 周磊    时间: 2012-10-17 23:15
是什么让他们区分是两个字节还是一个字节,比如为什么不会出现,把两个字母当成一个汉字输出,一个汉字当成了两个字母输出?
作者: 周磊    时间: 2012-10-18 12:22
怎么没有人啊?
作者: 徐升兴    时间: 2012-10-18 13:16
一个char是2个byte。所以是2*6字节的长度。s字符串的长度是内容所占字节的和:2*2+1*4个字节。
作者: 宫明星    时间: 2012-10-18 13:51
楼上的观点我同意。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2