日期:2014-05-20  浏览次数:20771 次

说说char型为什么可以存汉字?
面试遇的问题,想了好久,不知道怎么回答~

------解决方案--------------------
是不是底层的某种机制啊?
面试问这种问题。。。
我是一只小小小小菜鸟。。。。
------解决方案--------------------
一个char 16字节 ,一个汉字2字节。 所以没问题啊
------解决方案--------------------
1.char是16位的阿
编码范围从0-65535
2.我们都知道1个汉字用2个字节存放
那末正好在char的范围呢
所以可以用char存放汉字阿

比如说
汉字 “我“ 的unicode编码是25105
所以可以用char存放阿
------解决方案--------------------
……
char 型只不过存的是字符集的遇射码而已……就是一堆一定范围内的整型数……传统GB2312码,是两个 char 元素表示一个汉字,第一个 char 值为负值,这就告诉系统,这是一个非ASCII字符,需要再读取其后面的一个,就是两个成一对儿,然后找汉字或者其它非ASCII字符集去映射出是什么字……
------解决方案--------------------
java中字符(char)采用的unicode(16位表示)编码,一个汉字也是用两个字节表示,所以说是可以存储的
------解决方案--------------------
2楼和楼上为什么认为一个char是16字节呢,应该是16位吧。
------解决方案--------------------
因为char 在java里面是unicode,2个字节

在c/c++和delphi里面 不是 unicode,只有一个字节
------解决方案--------------------
Java code

package com.wm.mad.tmp;

import junit.framework.TestCase;

public class CharEx extends TestCase {
    public void test()  {
        char ch = ' ';
        for(int i=0; i < 65535; i++) {
            ch = (char) i;
            System.out.print(ch);
            System.out.print(' ');
            if((i + 1) % 10 == 0) {
                System.out.println();
            }
        }
        assert(true);
    }
}

------解决方案--------------------
探讨
char 是两字节,所以可以存汉字

"汉".toString().getBytes().length  ==  2