黑马程序员技术交流社区
标题:
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文件中。
3.png
(25.71 KB, 下载次数: 23)
下载附件
2012-8-23 19:35 上传
楼主打开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