java中一个字符占两个字节,中文占两个字节,String str="abgs你好sdf",调用str.getBytes(),转换为字节数组:为什么if(str.getBytes().length==2){
System.out.println(str);//可以输出中文呢,字符和中文都是占俩个字节啊?字符存的是AScii,那中文存的是什么?
}
System.out.println(str);//可以输出中文呢,字符和中文都是占俩个字节啊?字符存的是AScii,那中文存的是什么?
}
java中一个字符占两个字节,中文占两个字节,
那么
"a".getBytes().length == 2;
"中".getBytes().length == 2;
是不是这个意思.如果是这个意思的话:
没错,在jvm中单字母与中文都是占用两个空间。只是对于单字母而言它只用了一个字节而已。
在进行getBytes()操作时,按照本地编码进行编码,返回字节数组,"a"中的空字节被舍弃,从而
"a".getBytes().length == 1.
而中文本身就是使用两个字节,所以
"中".getBytes().length == 2;
不知你是不是这样的疑惑
也请高手指正。
楼主要理解汉字等也是字符,而不是只有在ascII(一个字节)码里的才叫字符(字符是指能在计算机里表示的所有符号的总称)。
lz要明白字符存在计算机里是通过编码实现的,而编码各不相同。现在通用的是ascII(美国标准字符交换集)。而Unicode也已成为标准它包括ascII(Unicode前128个字符就是它),现在ascII已有些力不从心了。
例如ascII里就没有汉字符也没有除英文字母以外的其他国字母,如在ascII里要是使用汉字就必须引入一个汉字库。但在Java里由于他使用unicode字集所以就不需要了。
你说中文存什么?lz,在计算机里除了0和1外就什么都没有了。
对于一个字符给他编码,实质是给他在这个字集里编个号:0---null存0的就表是null
我就是这个意思:但是不明白:没错,在jvm中单字母与中文都是[color=#0000FF]占用两个空间。只是对于单字母而言它只用了一个字节而已。[/color]
//:请指教
字符串的长度也是按照字符统计的,所以
length("中国")==2
http://topic.csdn.net/u/20081107/16/4c2a9131-9778-405f-908f-7ec91caa9a34.html这个贴讨论的是同样的问题。
你可以看看。