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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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()方法也没看到有重写!不解·····

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

6 个回复

倒序浏览
Object有toString()方法啊,默认调用了

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
年少丶 发表于 2014-3-3 17:21
Object有toString()方法啊,默认调用了

就是啊,,但是object的toString 不是return getClass().getName() + "@" + Integer.toHexString(hashCode());嘛,这个返回回来的是java.runtime.name=Java(TM) SE Runtime Environment,我专门看了没有重写toString()的啊,搞不清楚了。
回复 使用道具 举报
这个绝对是调用toString方法,如果没调用toString,他应该输出Entry的类名

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
System.out.println(entry)这里面存储的是键值对的关系 ,,也就是引用。。所以你直接打印会打印出这个引用所指向的具体的数值。。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报 1 0
打印控制台 默认会调用Object中的toString方法 说白了每一个类都有toString方法 默认的输出的是地址值!,若你想输出你要求的值 就要重写toString方法
回复 使用道具 举报
水蓝 中级黑马 2014-3-13 17:11:22
7#
Entry是一个接口,一般现成的实现接口的类,都已经重写了toString()方法。
比如:TreeSet中的Entry,如图:



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

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


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

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