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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
                byte[] arr = {97};
                String s = String.valueOf(97);       //这个是整数字符串输出
                String s1 = new String(arr);                  //为什么构造函数里输出的是却是gbk码表?????
                System.out.println(s);                   // 输出97
                System.out.println(s1);                 //而这个却是a,什么原因?




2 个回复

正序浏览
路过打酱油
回复 使用道具 举报
本帖最后由 罗勇 于 2016-5-26 00:26 编辑

里面包含的信息量比较大:
1,valueOf方法把97int数(基本数据类型)转换成了字符串 “97”,并赋值给了s(引用数据类型)。(在内存里把一个常量转换成一个字符串,没有从硬盘到内存的解码过程当然不用gbk码表)
2,引用数据类型对象打印的时候其实调用的对象的toString 方法
3,string类重写了Object类里的toString方法,改写后的toString方法返回的是该对象本身。所以打印s的时候是97
4 , 而    String s1 = new String(arr);  新建了一个对象,调用了String类的构造方法,把字节数组转换成了字符串,字节到字符串是一个从硬盘到内存的过程,也就是要把电脑语言转换成我们人看得懂的语言,相当于解码的过程,所以用的是系统的编码表gbk,也就是把{97}解码后的的a赋值给了s1,所以打印的时候就是a喽
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马