黑马程序员技术交流社区

标题: 为何string构造函数和valueOf()方法的的结构为啥不一样 [打印本页]

作者: ajj1314    时间: 2016-5-25 23:15
标题: 为何string构造函数和valueOf()方法的的结构为啥不一样
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,什么原因?





作者: 罗勇    时间: 2016-5-26 00:19
本帖最后由 罗勇 于 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喽
作者: z736886202    时间: 2016-5-26 00:36
路过打酱油




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