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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋国涛 黑马帝   /  2011-9-3 22:38  /  1874 人查看  /  4 人回复  /   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 收起 理由
老罗 + 1

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-9-3 22:55:23
沙发
toString 是返回该对象的字符串类型,如果不加toString则JVM调用默认的方法,另外我们可以自己定义toString方法,然后利用打印语句让JVM按照我们自己设置的toString方法来进行打印

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-3 23:12:33
藤椅
首先 所有的类都是Object的子类,而toString()是Ojbect中的方法,看这段简单明了的代码:[code]class Demo{        // 定义Demo类,实际上就是继承了Object类
};
public class ObjectDemo01{
        public static void main(String args[]){
                Demo d = new Demo() ;        // 实例化Demo对象
                System.out.println("不加toString()输出:"+d) ;
                System.out.println("加上toString()输出:"+d.toString()) ;
        }
};[/code]从结果中你会发现加与不加toString()完成的功能都是一样的,就证明了对象在打印的时候一定会调用toString()方法,这是默认调用的。而你举的例子其实只是为了让你理解,在使用输出的时候都会默认调用toString()方法。
再看这段代码:[code]class Person{
        private String name ;        // 定义name属性
        private int age ;        // 定义age属性
        public Person(String name,int age){
                this.name = name ;
                this.age = age ;
        }
        public String toString(){    //覆写Object 中的toString方法
                return "姓名:" + this.name + ";年龄:" + this.age ;
        }
};
public class ObjectDemo02{
        public static void main(String args[]){
                Person per = new Person("小李",30) ;         // 实例化Person
                System.out.println("对象信息:" + per) ;
        }
};[/code]从这个结果可以发现,我们并没有调用toString()方法 ,但依然得到了输出结果,近尔也证明了,toString()方法是默认调用的,只是为产明这一点。

评分

参与人数 1技术分 +3 收起 理由
老罗 + 3

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-4 02:10:24
板凳
恩,涛哥的回答已经非常明白了~
通过System.out.println()打印对象的时候,调用的就是对象的toString()方法来打印的
所以,在打印对象的时候,在对象后面加不加toString()都没关系,结果完全是一样的

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 你来晚了。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-4 09:24:57
报纸
楼上说的已经差不多了我再做点补充:
所有的类都是Object的子类,而toString()是Ojbect中的方法,如果你自己编写的类没有重写toString()方法的话,那么当打印对象的时候就会默认调用Object类的toString方法,请看Object类的toString方法源码:[code=java] public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }[/code]相反,如果子类覆盖toString方法的话,那么这就是典型的多态应用了

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 你也来晚了,哈哈。

查看全部评分

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