黑马程序员技术交流社区

标题: char数据类型疑问 [打印本页]

作者: 杜鹏云    时间: 2012-8-23 18:42
标题: char数据类型疑问
char 类型字符用两个字节表示,即16位;
byte类型数据用一个字节表示,即8位。

如下代码
char a="黑";
String str="黑";
byte[] b=str.getBytes("UTF-8");
那么str表示的“黑”是3*8=24位,但是a可是16位啊,他是怎么存下去的???


作者: 唐杨老师    时间: 2012-8-23 18:54
char a="黑";
String str="黑";
byte[] b=str.getBytes("UTF-8");

a可是16位,那是在默认的GBK码表存的,是占两个字节的 ,第一位是负数,后边的那个可能是正.此时是2*8=16
                              
如果汉字"汉字"以"UTF-8"存入字节数组,则汉字自然是占三个字节.3*8=24.

楼主忘了默认码表GBK的事情了

作者: 全海波    时间: 2012-8-23 18:55
一个汉字是2字节!!!
作者: 杜鹏云    时间: 2012-8-23 19:21
String str="黑";这个默认GBK??

作者: 周兴华    时间: 2012-8-23 19:37
char a="黑";
String str="黑";
byte[] b=str.getBytes("UTF-8");//这是一个编码的过程,将str字符串按UTF-8进行编码保存至byte[] b数组中去。UTF-8一个字符是3个字节的。
我们中文系统默认的编码形式是GBK的,以下代码可以看出。
import java.io.*;
import java.util.*;
//系统信息
public class SystemInfo {
public static void main(String[] args) throws IOException{
  Properties prop=System.getProperties();
  //System.out.println(prop);
  prop.list(new PrintStream("sysinfo.txt"));
}
}
上面这段代码可以获取系统信息,并保存在工作台根目录下的sysinfo.txt文件中。

楼主打开sysinfo.txt文件,可以看到file.encoding=GBK这行,说明默认编码为GBK的

作者: 王自强    时间: 2012-8-24 02:33
楼主
char a ="黑";//这个可以通过编译吗?应该是char a = '黑';  吧
String str="黑";这个确实默认GBK,就是说一个"黑"字,占两个字节
byte[] b=str.getBytes("UTF-8");
//进行转换后,按照UTF-8来存的话,就是三个字节了
作者: 贾飞雨    时间: 2012-8-24 11:37
隐式转换吧
作者: 冯培军    时间: 2012-8-24 12:07
char类型表示的是16位,没错,表示的是0-65535,二个字节
byte类型表示的是8位,-128到127,一个字节
讲一个字符串转换成一个数组,你使用的是utf-8,占三个字节,变成了一个数组,那么字节数组中就有3个字节,你可以用
for循环遍历这个字节数组,可能打印出12 -23 23 。如果你将char类型的转换成byte,那么必须也是一个数组.
在说说,字符的编码形式吧
ASCII:英文码表,每个字符占1个字节。A是65,a是97
GB2312:兼容ASCII,包含中文,每个英文占1个字节(正数),中文占2个字节(2个负数)。
GBK、GB18030:兼容GB2312,包含更多中文,每个英文占1个字节(正
数),中文占2个字节(第一个负数、第二个可正可负)。
Unicode:国际码表,每个字符占2个字节。Java中存储字符类型就是使用的Unicode编码。
UTF-8:国际码表,英文占1个字节,中文占3个字节。





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