注册 登录
编程论坛 JAVA论坛

为什么打印对象名称就是打印tostring方法的返回值

郭赛 发布于 2020-05-04 09:00, 2984 次点击
刚开始学java,希望讲明白一点
7 回复
#2
林月儿2020-05-04 09:12
toString()方法打印的是对象名称?不是个有返回值的方法吗?
#3
郭赛2020-05-04 10:13
回复 2楼 林月儿
比如class A
A a = new A();
System.out.println(a)和System.out.println(s.toString())输出是一样的
#4
郭赛2020-05-04 10:21
回复 2楼 林月儿
只有本站会员才能查看附件,请 登录
#5
林月儿2020-05-04 17:24
嗯,都写这么多了,哪里不懂
#6
love云彩2020-05-04 19:15
这是java的默认行为,每当我们打印一个对象引用时,它会在内部调用toString()方法。 因此,如果我们不在类中定义toString()方法,则调用Object.toString()

所有类默认继承Object,Object基类里的toString 方法返回该对象的字符串表示,其实该字符串内容就是对象的类型 +@+ 内存地址值。

由于 toString 方法返回的结果是内存地址,在打印一个对象时,其实就是打印了对象引用的地址,基于内部的默认行为,会自动调用重写后的toString或基类Object的toString方法输出
#7
郭赛2020-05-05 00:49
回复 6楼 love云彩
谢谢,我大概懂了。
#8
hk6662021-05-27 11:45
回复 6楼 love云彩
回复一下,toString会打印出对象的内存地址说法并不正确,先看看Java API文档,其中关于Object.toString()有这样一段描述:@后面的是转换为十六进制的对象的哈希值。所以当我们创建大量的元素并进行哈希值比较时,@后面的值将会的可能冲突,这样Object.toString()返回的字符串也不可避免地重复了。“对象名+@+对象内存地址”这种说法肯定不对,因为内存地址肯定不会重复的。

[此贴子已经被作者于2021-5-27 11:46编辑过]

1