关于List集合和Object类打印时,输出的是否是首地址问题

本文解释了为何Object类对象打印输出首地址,而List集合(如包含String类型)的for-each循环打印数据。主要讨论了Object类的toString方法和String类的重写,以及它们如何影响对象在控制台的显示。
摘要由CSDN通过智能技术生成

 有些同学会有一些疑问,Object类对象打印时,控制台输出的是首地址,但为什么用加强型for循环遍历List集合时,打印出来的是数据.有些同学可能对什么时候打印的是首地址,什么时候能打印出数据很懵,这篇文章,我会讲解一下.

定义一个Object对象,打印一下,看看控制台输出的是什么

Object obj=new Object();
System.out.println(obj);
//System.out.println(obj.toString()); 当打印对象时,默认会调用Object类的toString,可以省略不写.和上一行的效果是一样的

 这个时候打印出的是首地址,因为Object类的toString方法定义的就是打印首地址,我们可以按Ctrl+点击toString 进入Object的源码中看一下Object类的toString方法

 在Object类的源码中我们可以看到Object类的toString方法中,返回的是hashCode哈希码,就可以理解为数据的存储位置.

 在来看一下String类的toString方法

String s="abc";
System.out.println(s.toString());

 

 String类的toString方法打印的是数据 ,因为 String类的源码中的toString方法返回的是数据本身.

,可以ctrl+鼠标点一下查看一下toString方法

当List集合存放字符串类型的数据时,打印时,控制台输出的是字符串

List list =new ArrayList();

list.add("a");

list.add("b");

list.add("c");

list.add("d");

System.out.println(list1);

 

 用加强型for循环遍历一下,list集合向上转为Object对象看看效果:

for (Object ob:list){
    System.out.println(ob.toString());
}

 

 打印出来的也是具体数据,而不是地址.这个时候有同学可能会问,为什么list集合向上转型为Object后,怎么不是打印的地址,而是数据.

因为list集合添加的是String字符串类型,向上转为Object类后toString方法使用的是String类重写后的toString方法 ,所以打印的是值.

Object类是所有类的根类。它位于java.lang包中,是所有类的父类,因此所有的Java类都直接或间接地继承自Object类。所以String字符串类型,向上转为Object类后toString方法使用的是String类重写后的toString方法.

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不太会敲代码的搬砖工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值