java字符串字节长度问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:55:39
string s1="cn";
string s2="中国";
system.out.println(s1.getBytes().length)
system.out.println(s2.getBytes().length)

为何运行以后s1显示的是2
s2显示的是4?
不是在java中每个字母和汉字都占两个字节吗?

另外getBytes()和toBytes()有什么分别?
抱歉,可能是我没有说清楚.
很多书上都说一个字母是占一个字符,两个字节.而一个汉字也是占一个字符,两个字节.我想问的是为何书上说的和电脑上反应出来的不一样?是不是函数本身的问题?getByte()的具体含义究竟是什么?

Java语言内部的char是使用unicode编码,UTF-16,所以都是两字节。

getBytes后,实际上是转换成指定的编码字符集。

不指定时,一般用本地字符集,通常是GBK、ACSII等,在这些字符集中,英文都是单字节的,所以会出现这样的问题。

getBytes
public byte[] getBytes()使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。
当此字符串不能在默认的字符集中解码时,该方法无指定的行为。当需要进一步控制解码过程时,应使用 CharsetEncoder 类。

http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html

toBytes()???那个类的??
--------------------------------------
字母 汉字问题,参考
http://blog.chinaunix.net/u/7893/showart_161439.html

字母默认的是"ISO8859-1"编码,长度是1.而汉字默认的是gb 2312,他定义长度是2.这些都是本地系统自己定义的。
class test {

public static void main(String[] args) {
Character character = new Character('好');
System.out.println(character.t