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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Cheers_for_CRAZ 中级黑马   /  2013-12-30 14:51  /  1335 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Cheers_for_CRAZ 于 2013-12-30 22:26 编辑

System.out.println(new String());为什么打印值为空,它不是一个对象吗,打印的应该是hashcode值呀?
System.out.println();会调用toString()方法,但是toString()方法到底是哪个类中的toString()方法?
在遍历Object数组的时候,怎么知道里面的值是什么,那么这时候又是怎么判断里面元素的类型的呢?
            也就是说这是侯打印会调用哪个里面的toString()方法呢?

评分

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

查看全部评分

4 个回复

正序浏览
System.out.println();会调用println语句中接收的对象的toString()方法,object的toString()方法是打印hashcode值,但编写一个自己的类时,如果复写了toString()方法,打印他时调用的就是你复写的toString代码了,当然String类的toString()方法是被复写过了
回复 使用道具 举报
System.out.println(new String())中调用的toString()方法是String类型复写的Object类的toString()方法,
集合元素判断元素类型可以使用instanceof关键字,如下
                Object[] objs = {"a","sf","asf"};
                for(Object obj : objs)
                {
                    if(obj instanceof String)
                    {
                        String s = (String)obj;
                        System.out.println(s);
                    }
                }
这里面就是调用了String复写自Object的toString()方法

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
String重写了toString方法,只有没重写toString方法的类,才会打印hashcode值。
回复 使用道具 举报
本帖最后由 布鲁Go 于 2013-12-30 15:35 编辑

String类中  String()的构造方法是这样描述的:  初始化一个新创建的 String 对象,使其表示一个空字符序列。所以,第一打印空字符串。

至于toString()  是这样。如果本身这个类没有复写过object的toString()方法。那就都是调用Object中的toString()方法。。如果复写过了,那就调用自己的。。自己有就用自己的,没有就用父亲的。按你的描述试着写了个Object数组代码:
  1. import java.util.*;
  2. class Demo {

  3.         public static void main(String[] args)
  4.         {

  5.                           Object[]  obj =new  Object[5];
  6.                         obj[0] =new ArrayList();
  7.                         obj[1] ='b';
  8.                         obj[2] ="dfafa";
  9.                         obj[3] =new int[3];
  10.                         obj[4] =1;        

  11.               for (int i=0;i<5 ;i++ )
  12.               {
  13.                                   System.out.println(obj[i]);
  14.               }               
  15.         }

  16. }
复制代码
答应结果如下:
[]
b
dfafa
[I@5e1077
1

貌似除了数组,其他基本都是打印自己内容的。。感觉数组算比较特别,new int[3],你看,后面不带(),不是自己用构造方法搞出来的,所以就打印了内存地址。其他对象一般要自己弄个构造方法搞出来,一出来在堆内存中就有初始化值了,很多默认为空参数。引用数据类型有三种,类类型,接口类型,数组类型,感觉就数组比较特别,当然,只是个人理解。不敢保证对,希望对你有用。



评分

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

查看全部评分

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