黑马程序员技术交流社区

标题: Entry<Object, Object>,直接打印为什么是字符串? [打印本页]

作者: q527198615    时间: 2014-3-3 16:49
标题: Entry<Object, Object>,直接打印为什么是字符串?
  1. package com.itheima;

  2. import java.util.Map.Entry;
  3. import java.util.Properties;

  4. public class SystemDemo {
  5.         public static void main(String[] args) {
  6.                 Properties prop = System.getProperties();
  7.                 for(Entry<Object, Object> entry :prop.entrySet()){
  8.                         System.out.println(entry);
  9.                         System.out.println(entry.toString());
  10.                        
  11.                 }
  12.         }
  13. }
复制代码

输出为什么是java.runtime.name=Java(TM) SE Runtime Environment这种格式的字符串呢?还有toString()方法也是这样,难道它本事就是字符串?他应该是一种map集合啊,查看toString()方法也没看到有重写!不解·····

作者: 年少丶    时间: 2014-3-3 17:21
Object有toString()方法啊,默认调用了
作者: q527198615    时间: 2014-3-3 18:23
年少丶 发表于 2014-3-3 17:21
Object有toString()方法啊,默认调用了

就是啊,,但是object的toString 不是return getClass().getName() + "@" + Integer.toHexString(hashCode());嘛,这个返回回来的是java.runtime.name=Java(TM) SE Runtime Environment,我专门看了没有重写toString()的啊,搞不清楚了。
作者: 年少丶    时间: 2014-3-3 19:11
这个绝对是调用toString方法,如果没调用toString,他应该输出Entry的类名
作者: 无道    时间: 2014-3-3 19:45
System.out.println(entry)这里面存储的是键值对的关系 ,,也就是引用。。所以你直接打印会打印出这个引用所指向的具体的数值。。

作者: 徐进    时间: 2014-3-5 10:48
打印控制台 默认会调用Object中的toString方法 说白了每一个类都有toString方法 默认的输出的是地址值!,若你想输出你要求的值 就要重写toString方法
作者: 水蓝    时间: 2014-3-13 17:11
Entry是一个接口,一般现成的实现接口的类,都已经重写了toString()方法。
比如:TreeSet中的Entry,如图:



而且Enrty实现后,都声明成了final class,也就是不能被继承了,说明toString方法也不能被覆盖了。
所以,想整成其它输出格式,真的比较麻烦了。
你得想办法拿出你想要的数据,慢慢整格式。

因为都是集成Entry接口,所以如果你愿意大费周章,搞个动态代理的话,这也应该是一个解决的办法。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2