黑马程序员技术交流社区

标题: 求大神讲解 [打印本页]

作者: lang    时间: 2015-3-3 20:26
标题: 求大神讲解
本帖最后由 lang 于 2015-3-4 14:45 编辑

public class AD {
public static void main(String[] args){
        Demo d=new Demo();
        String s="abc";
        System.out.println(d);//打印的是地址值
        System.out.println(s);//打印的是abc
}
}

class  Demo
{
        String ds="demo";        
}

问题:d和s同为指向型变量,存储的都是地址值,但打印出来,一个为地址值,一个为内容,为什么结果不一样呢?

作者: 菠菜树    时间: 2015-3-4 10:39
我也不知道,但是我自己胡乱猜测认为,首先println()是调用了toString,
s是String类,println(s)输出abc是没有疑问的
但是d是demo类的一个实例,d应该是一个空间的指针值,直接输出println(d)就是输出d的地址值
d的一个属性是ds,d.ds是String类,println(d.ds)应该输出abc,

作者: shaoshuai    时间: 2015-3-4 11:29
打印出来的d确实是调用了toString()方法,而Object中toString()的实现就是输出对象的hashcode
作者: lang    时间: 2015-3-4 14:44
菠菜树 发表于 2015-3-4 10:39
我也不知道,但是我自己胡乱猜测认为,首先println()是调用了toString,
s是String类,println(s)输出abc是 ...

哦,明白了,多谢多谢!!
作者: 小十    时间: 2015-3-8 12:44
自己定义的对象没有toString方法,String ss = d.ds; 把调用的结果在返给String。调用String类型里面的toString方法就行了。




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