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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李小丰 黑马帝   /  2012-2-5 10:35  /  2109 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[code=java]public class TestInteger {
        public static void main(String[] args) {
                int w = new Integer(args[0]).intValue();
                int h = Integer.parseInt(args[1]);
                // int h = Integer.valueOf(args[1]).intValue();
                for (int i = 0; i < w; i++) {
                        StringBuffer sb = new StringBuffer();
                        
                        for (int j = 0; j < h; j++) {
                                sb.append('*');
                        }
                        System.out.println(sb.toString());
                }

        }
}[/code]这个程序是测试基本类型数据包装类的,疑问是在System.out.println(sb.toString());
这一句,不解为什么要转换成String 类型呢,直接System.out.println(sb);也可以得到结果,为什么这样做呢?

评分

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

查看全部评分

8 个回复

正序浏览
直接打印对象会调用对象的toStrin()方法,如果它没有重写从父类继承的toString方法,就调用了从父类继承的toString方法 这个方法和父类具有一样的行为就是打印出“<类名>+'@'+<本实例的哈希码>” 如果重写了toString就会调用自己的toString执行自己特有的动作!
回复 使用道具 举报
衣服 黑马帝 2012-2-5 14:36:01
8#
sb.toString()  加了就用自己的,不加就用Object的     
回复 使用道具 举报
王_涛 黑马帝 2012-2-5 14:10:43
7#
由多态的特性,我想你知道这个toString()到底是Objec的还是子类的。

回答完毕!
回复 使用道具 举报
System.out.println(sb);隐式的是System.out.println(sb.toString());

打印语句的底层实现也调用toString(),所以写不写toString()都一样

来自于API
java.io.PrintStream类
public void println(Object x)打印 Object,然后终止该行。此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。

参数:
x - 要打印的 Object。

String类
public static String valueOf(Object obj)返回 Object 参数的字符串表示形式。

参数:
obj - 一个 Object。
返回:
如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
另请参见:
Object.toString()
回复 使用道具 举报
System.out.print(o);
如果O是一个对象,
系统会自己默认调用Object类中的toString()方法,
打印出类名@hashcode;
但StringBuffer已复写了toString()方法,
打印出已复写好的格式。

所以加不加toString()都是OK的。

评分

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

查看全部评分

回复 使用道具 举报
我认为,
加不加toString()打印的内容一样,
但,
当你打印new Person("","")这个对象时,
会调用自己复写好的toString()方法来打印自定义好的格式;
同样StringBuffer存放的也是一个对象,
也习惯性地用toString()方法来打印。
不知道这样理解对不对。
回复 使用道具 举报
其实直接打印StringBuffer和打印StringBuffer的toString方法是一样的,
因为打印StringBuffer就是调用它的toString方法。
但是sb.toString返回的是字符串,这样我们可以用处理字符串的方法来处理
StringBuffer的内容。

评分

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

查看全部评分

回复 使用道具 举报
我觉得啊
如果你直接执行的是System.out.println(sb)。
那么这里调用的是Object的toString()方法。打印的东西是“<类名>+'@'+<本实例的哈希码>”值。
没有多大意思。
而如果你执行的是System.out.println(sb.toString());那么在此之前你可以重写一下toString()方法。
让他返回一下更有意思的内容。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马