专栏首页Java典籍Java字符串无意识的递归

Java字符串无意识的递归

Java中的每个类基本上都继承自Object,标准容器类自然也不例外。因此容器类都有toString()方法,并且重写了该方法,使得它生成的String结果能够表达容器本身,以及容器所包含的对象。例如ArrayList.toString(),它会遍历ArrayList中包含的所有对象,调用每个元素上的toString()方法:

输出结果为:

如果你希望toString()方法打印出对象的内存地址,也许你会考虑使用this关键字:

当你创建了Person对象,并将其打印出来的时候,你会得到一串非常长的异常。如果你将该Person对象存入一个ArrayList中,然后打印该ArrayList,你也会得到同样的异常。其实,当如下代码运行时:

"Person address:" + this

这里发生了自动类型转换,有Person类型转换成String类型。因为编译器看到一个String对象后面跟着一个"+",而再后面的对象不是String,于是编译器试着将this转换成一个String。它怎么转换呢?正是通过调用this上的toString()方法,于是就发生了递归调用

如果你真的想要打印出对象的内存地址,应该调用Object.toString()方法,这才是负责此任务的方法。所以,不能使用this,而是应该调用super.toString()方法。即把上面的toString()方法改为:

本文分享自微信公众号 - Java典籍(helloHBLing),作者:冰湖一角

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java语言中null与""的区别

    String s1=null; //定义了一个对象实例s1,但未将该实例指向任何内存空间;

    硕人其颀
  • 记一次tomcat内存大涨到溢出的经历

    现象是测试一段时间后页面就卡死了,当时根据这个现象下意识的怀疑是卡到数据库这一层,然后查看数据库连接相关的参数,如意料之中的相似,连接数太多了!当把数据库连接数...

    硕人其颀
  • Java实现将中文转成拼音和ASCII码

    最近项目上遇到一个需求:模糊搜索姓名时既可以输入汉字也可以输入拼音进行搜索,这就要求在保存姓名时也要将其拼音保存起来。

    硕人其颀
  • 分享一篇开发杂文

    假如有一个设备,采用UDP组播协议,在正常通讯情况下通过网络给你发送数据,注意的是,不管通道有没有通都会发出数据但是对应的关键标识没有,设备每100ms发送一次...

    用户7053485
  • JavaScript 设计模式学习第一篇-设计模式简介

    小时候打游戏,我们总是追求最快通关;朋友聚会,我们会拿出手机查看哪家店离得近,而且实惠又好吃;下班回寝室,我们总是选最便捷的路线坐车。我们总是追求一件事最优美最...

    越陌度阡
  • C#设计模式开启闯关之路

      这是一条望不到尽头的编程之路,自踏入编程之路开始。就面临着各式各样的挑战,而我们也需要不断的挑战自己、不断学习充实自己、打好坚实的基础。以使我们可以走的更远...

    小世界的野孩子
  • Android开发(7) 文件下载

    我们在开发中经常需要从服务器下载文件,下载的内容可能有交换的信息,缓存的图片,程序更新包等。我们使用URLConnection来实现下载。

    zhangyunfeiVir
  • 领域驱动设计-什么是领域驱动设计和怎么使用它

    这篇文章讨论领域驱动设计(DDD),DDD是建立在面向对象分析设计上开发软件的一种方法。 通过这篇文章我们解释什么是领域驱动设计,在现代开发周期中如何实现,使用...

    用户7657330
  • 知识点——初识java中File类

    SUN公司提供给开发者操作文件和文件夹的一个类对象。 Java中万物皆对象,计算机中万物皆文件

    用户7073689
  • 从 VSCode 看大型 IDE 技术架构

    为什么要去看 VSCode?因为我们团队在做的中后台快速研发平台云凤蝶也是一款类似 Web IDE 形态的产品:

    Nealyang

扫码关注云+社区

领取腾讯云代金券