黑马程序员技术交流社区
标题:
为何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