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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class Person {//默认的修饰符,在包与包之间访问,可以达到封装的效果
  2.         private String name;
  3.         private int age;
  4.         public Person(){}
  5.         public Person(String name, int age) {        //在另一个包中使用本类的构造方法,需要让构造方法的权限修饰符是public的
  6.                 this.name = name;
  7.                 this.age = age;
  8.         }

  9.         public String toString() {
  10.                 return "我的名字:" + name + ",我的年龄是:" + age ;
  11.         }
  12. }
  13. package com.baidu;
  14. import cn.itcast.Person;        //导入包,其实是导入包中的类
  15. //import cn.itcast.*;                        //星式导入,是让导入的包中所有的类对本类可见
  16. class Demo6_Pack {
  17.         public static void main(String[] args) {
  18.                 Person p1 = new Person("小王",19);
  19.                 Person p2 = new Person("小李",20);
  20.                 System.out.println(p1);                //我的问题在这里,这里打印结果是 我的名字是小王,我的年龄是19,为什么传入的是类的引用p1,打印出来的不是一个地址值?
  21.                 System.out.println(p2);                //我觉得这里应该把 p1改成 p1.toString 才对啊,当然我的想法肯定是错的,但是就是想不明白。
  22.         }
  23. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

4 个回复

倒序浏览
本帖最后由 麦者 于 2013-11-6 22:02 编辑

当调用println(p1)的时候,触发的是println(p1.valueOf),valueOf接收的参数是Object返回的是String,函数如下:public static String valueOf(Object obj)返回 Object 参数的字符串表示形式。
参数:
obj - 一个 Object。
返回:
如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
另请参见:
Object.toString(),这就是为什么你打印出来的是:我的名字是小王,我的年龄是19,的原因。

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 魏-玉-彪 于 2013-11-6 23:42 编辑

  1. public           
  2. class Person {//默认的修饰符,在包与包之间访问,可以达到封装的效果
  3.     private String name;
  4.     private int age;
  5.     public Person(){}
  6.     public Person(String name, int age) {        //在另一个包中使用本类的构造方法,需要让构造方法的权限修饰符是public的
  7.             this.name = name;
  8.             this.age = age;
  9.     }

  10.     public String toString() {
  11.             return "我的名字:" + this.name + ",我的年龄是:" + this.age ;
  12.     }
  13. }
  14. //package com.baidu;
  15. import cn.itcast.Person;        //导入包,其实是导入包中的类
  16. import cn.itcast.*;          //星式导入,是让导入的包中所有的类对本类可见
  17. class Demo6_Pack {
  18.     public static void main(String[] args) {
  19.             Person p1 = new Person("小王",19);
  20.             Person p2 = new Person("小李",20);
  21.           System.out.println(p1);          //我的问题在这里,这里打印结果是 我的名字是小王,我的年龄是19,为什么传入的是类的引用p1,打印出来的不是一个地址值?
  22.           System.out.println(p2);                //我觉得这里应该把 p1改成 p1.toString 才对啊,当然我的想法肯定是错的,但是就是想不明白。
  23.     }
  24. }


复制代码

我的名字:小王,我的年龄是:19
我的名字:小李,我的年龄是:20
请按任意键继续. . .


            Person类已经重写toString();方法,系统自动调用,所以不用再明确调用

回复 使用道具 举报
亲,你这个很明显你已经重写toString方法了,而输入时,默认是调用toString()的。所以你带不带这个方法,输入的都一样,如果你不重写。那么调用的就是object中的toString方法。那时打印的就是地址值了。
回复 使用道具 举报
谢谢你们,我懂了^_^
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马