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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-14 11:00  /  1815 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

buf是个字节数组,请教下System.out.println(new String(buf));和System.out.println(buf.toString());为什么这两个打印的不同啊,有什么区别!

4 个回复

倒序浏览
System.out.println(buf.toString());只是打印数组的地址

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
单从这两个的调用形式来看
new String(but)是新建了一个对象传入buf这个值,然后通过println方法输出(其实输出也是调用String对象中的toString方法)
buf.toString()是直接调用了buf所属性对象的toString方法,buf是个数组,所以这个数组的toString方法应该会返回该数组的地址就是[@###形式

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
先说这个new String(buf); 这是调用的String的构造函数来创建一个字符串对象。
(这是API种对String的字节数组构造函数的描述:String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。)
然后输出的时候,会调用字符串本身重写Object的 toString()方法,描述是这样的: 返回此对象本身(它已经是一个字符串!)。

再说buf.toString();是调用的buf数组的toString()方法。既返回该对象的字符串表示(跟Object中方法一样)。所以会打印出数组的地址值
回复 使用道具 举报
System.out.println(buf.toString());和System.out.println(buf);没区别吧
buf是一个数组,那么buf就是一个引用变量,打印的是地址值吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马