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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王广亚 于 2013-9-6 17:53 编辑
  1. import java.util.*;
  2. class Student1{
  3.         private String id;
  4.         private String name;
  5.         Student1(String id,String name){
  6.                 this.name=name;
  7.                 this.id=id;        
  8.         }
  9.         public String toString(){//第一个问题:下面的代码哪个地方的底层掉用到了toString方法。
  10.          return id+"...."+name;
  11.         }
  12. }
  13. public class MapDemo3 {

  14.         public static void demo() {
  15.                 HashMap<String,List<Student1>> czbk=new HashMap<String,List<Student1>>();
  16.                 List<Student1> reyu=new ArrayList<Student1>();
  17.                 List<Student1> jiuye=new ArrayList<Student1>();
  18.                 czbk.put("yureban", reyu);
  19.                 czbk.put("jiuyeban", jiuye);
  20.                 reyu.add(new Student1("01","zhangsan"));
  21.                 reyu.add(new Student1("02","lisi"));
  22.                 jiuye.add(new Student1("01","zhaoliu"));
  23.                 jiuye.add(new Student1("02","wangwu"));
  24.                 Iterator<String> it=czbk.keySet().iterator();
  25.                 while(it.hasNext()){
  26.                         String roomName=it.next();
  27.                         List<Student1> room=czbk.get(roomName);
  28.                         getInfos(room);
  29.                 }
  30.                
  31.         }

  32.         private static void getInfos(List<Student1> room) {
  33.                 Iterator<Student1> it=room.iterator();
  34.                 while(it.hasNext()){
  35.                         Student1 s=it.next();
  36.                         System.out.println(s);//第二个问题:此处打印的是Student1的对象,怎么回事?难道这两个问题有关联?
  37.          }
  38.                
  39.         }
  40.         public static void main(String args[]){
  41.                 demo();
  42.         }

  43. }
复制代码

评分

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

查看全部评分

5 个回复

倒序浏览
1.对于你的问题:下面的代码哪个地方的底层掉用到了toString方法。
答案:所有类的父类都是Object,那么Student1这个类,也继承了Object,那么就可以复写Object类中的toString() 方法。你可以查看API文档关于Object类的说明。
2.第二个问题:此处打印的是Student1的对象,怎么回事?难道这两个问题有关联?
答案:肯定是有关联的,因为此时调用的是Student1这个类的toString() 方法。
希望同学好好看看前面的视频。
加油~~

评分

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

查看全部评分

回复 使用道具 举报
对于一个方法,如果要运行,就得被调用。
既然你没有手动调用自己复写的toString()方法,那就是虚拟机自动调用的。
就在打印输出语句里面:System.out.println(s)。
这句话其实是这样的:System.out.println(s.toString()); //toString()隐藏了。
而这个toString()方法是你复写Object中的toString得来的,所以打印出来的就是id+"...."+name.

评分

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

查看全部评分

回复 使用道具 举报
getInfos(room);
System.out.println(s);
这个掉用到了toString方法
println

public void println(Object x)
打印 Object,然后终止该行。此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。
public static String valueOf(Object obj)
返回 Object 参数的字符串表示形式。
参数:
obj - 一个 Object。
返回:
如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
所以是这里调用的toString方法。

所以,打印对象是是现在这种格式打印出来的啦

评分

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

查看全部评分

回复 使用道具 举报
mo﹎雲℡ 发表于 2013-9-6 17:04
1.对于你的问题:下面的代码哪个地方的底层掉用到了toString方法。
答案:所有类的父类都是Object,那么Stu ...

这几天看的有点快,有点消化不良,String类这个地方有点忘了
回复 使用道具 举报
辛春鹏 发表于 2013-9-6 17:23
getInfos(room);
System.out.println(s);
这个掉用到了toString方法

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