A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜鹏云 中级黑马   /  2012-8-23 18:42  /  2237 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

char 类型字符用两个字节表示,即16位;
byte类型数据用一个字节表示,即8位。

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

7 个回复

倒序浏览
char a="黑";
String str="黑";
byte[] b=str.getBytes("UTF-8");

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

楼主忘了默认码表GBK的事情了
回复 使用道具 举报
一个汉字是2字节!!!
回复 使用道具 举报
String str="黑";这个默认GBK??
回复 使用道具 举报
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的
回复 使用道具 举报
楼主
char a ="黑";//这个可以通过编译吗?应该是char a = '黑';  吧
String str="黑";这个确实默认GBK,就是说一个"黑"字,占两个字节
byte[] b=str.getBytes("UTF-8");
//进行转换后,按照UTF-8来存的话,就是三个字节了
回复 使用道具 举报
隐式转换吧
回复 使用道具 举报
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个字节。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马