java中容易被忽视的toString()方法

之前一直认为toString就是将数据转换成字符类型,直到最近写出了一个bug才对toString有了新的认识

不同数据类型,toString() 有不同的操作

  • 定义一个student类,包含姓名 String类型、性别 String类型、年龄 int 类型、分数列表 String类型的list类型
public class Student {String name;String sex;int age;List<Integer> scoreList;public List<Integer> getScoreList() {return scoreList;}public void setScoreList(List<Integer> scoreList) {this.scoreList = scoreList;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", sex='" + sex + '\'' +", age=" + age +", scoreList=" + scoreList +'}';}
}
  • 测试toString方法
    public static void main(String[] args) {List<Integer> scoreList = new ArrayList<>();scoreList.add(1);scoreList.add(2);scoreList.add(3);Student student = new Student();student.setName("ziyuan");student.setSex("F");student.setScoreList(scoreList);System.out.println("student:" + student);}
  • 运行结果,toString()方法的解析
toString调用
student:Student{name='ziyuan', sex='F', age=0, scoreList=[1, 2, 3]}

System.out.println输出字符串,通过+实现student对象和"student:“字符串的拼接,其实是调用了student对象的toString()方法。
在toString方法中,“name='” + name : 也是调用了String类型的name变量的toString(),查看源代码得知String的toString方法就是返回本身,所以name.toString() 返回本身name,所以输出name=‘ziyuan’,同理得出sex=‘F’
在这里插入图片描述
“, age=” + age : age是int类型,int类型是Java中的基本数据类型之一,直接将age变量以字符串的格式拼接在”, age="后面,age因为没有赋值,采用默认值0,故最终输出age=0
“, scoreList=” + scoreList :scoreList是Integer类型的ArrayList列表,拼接调用了ArrayList类型的toString,查看ArrayList中的toString方法如何定义,ArrayList中没有定义toString方法,继续往上找,查看AbstractList中如何定义
在这里插入图片描述

AbstractList中也没有定义,继续往上找,查看AbstractCollection如何定义,
在这里插入图片描述
AbstractCollection有定义toString,如下图所示:
在这里插入图片描述
故最终输出scoreList=[1, 2, 3]

  • ArrayList 重新了toString方法,让数据内容比较直观的展示,但并不是所有的类型都进行了toString方法的重写,比如数组

在这里插入图片描述
toString方法返回的字符串表示该对象的类型和哈希码 ,如何希望返回实际的值或者其他自定义的值,可以重写toString方法
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年机器人技术的五大发展趋势,你有看好的吗?

文 BFT机器人 前言&#xff1a; 近些年来机器人技术作为推动社会发展的重要动力之一&#xff0c;它的发展成为重点关注对象&#xff0c;这一领域经历了漫长的发展。随着计算机、传感器和人工智能等技术的进步&#xff0c;现代机器人已经从简单的工具变成了各行各业的生产力。从…

9、使用 ChatGPT 的 GPT 制作自己的 GPT!

使用 ChatGPT 的 GPT 制作自己的 GPT! 想用自己的 GPT 超越 GPT ChatGPT 吗?那么让我们 GPT GPT 吧! 山姆 奥特曼利用这个机会在推特上宣传 GPTs 的同时还猛烈抨击了埃隆的格罗克。 GPTs概览 他们来了! 在上周刚刚宣布之后,OpenAI 现在推出了其雄心勃勃的新 ChatGPT…

信奥一本通:1075:药房管理

这个题可能有点误解&#xff0c;看这个实例&#xff0c;不是用30依次去减10 5 20 6 7 8&#xff0c;如果按照这个减法&#xff0c;30先减10再减5就剩15了&#xff0c;那完全不够后面20减的&#xff0c;所以次数还剩4次。但是&#xff0c;这道题是谁能减就减谁&#xff0c;意思就…

使用云渲染要注意什么?渲染100邀请码1a12

云渲染是利用云服务器进行渲染的方法&#xff0c;它能节省用户成本&#xff0c;提高效率&#xff0c;如果要用云渲染需要注意以下几点&#xff1a; 1、选择专业平台 一个专业的平台对渲染非常重要&#xff0c;比如渲染100&#xff0c;它是国内知名的云渲染提供商&#xff0c;拥…

【力扣 - 二叉树的中序遍历】

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 提示&#xff1a; 树中节点数目在范围 [0, 100] 内 -100 < Node.val < 100方法一&#xff1a;递归 思路与算法 首先我们需要了解什么是二叉树的中序遍历&#xff1a;按照访问左子树——…

Linux小程序--进度条

目录 1.知识补充 1.1回车和换行 1.2缓冲区 2.实现倒计时 3.实现进度条 1.知识补充 1.在制作小程序进度条之前&#xff0c;我们先了解一下&#xff0c;回车换行和行缓冲区的概念。 2.动态效果&#xff0c;在同一个位置刷新不同的图像&#xff0c;实现一个倒计时的效果。…

2024最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

Linux 磁盘分区、挂载

Linux 磁盘分区、挂载 Linux 分区 介绍 Linux 来说无论有几个分区&#xff0c;分给哪一目录使用&#xff0c;它归根结底就只有一个根目录&#xff0c;一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。 Linux 采用了一种叫“载入”的处理方法&…

(十四)devops持续集成开发——jenkins流水线使用pipeline方式发布项目

前言 本节内容我们使用另外一种方式pipeline实现项目的流水线部署发布&#xff0c;Jenkins Pipeline是一种允许以代码方式定义持续集成和持续交付流水线的工具。通过Jenkins Pipeline&#xff0c;可以将整个项目的构建、测试和部署过程以脚本的形式写入Jenkinsfile中&#xff…

打通全渠道,聚道云助力时尚巨头提升运营效能

客户介绍&#xff1a; 北京某时尚有限公司是一家集设计、生产、销售于一体的时尚产业领军企业。自成立以来&#xff0c;该公司一直秉承着对时尚的独特理解和不懈追求&#xff0c;以打造高品质、高品位的时尚产品为己任&#xff0c;深受国内外消费者的喜爱。 客户痛点&#xff…

springcloud:1.Eureka详细讲解

Eureka 是 Netflix 开源的一个服务注册和发现工具,被广泛应用于微服务架构中。作为微服务架构中的核心组件之一,Eureka 提供了服务注册、发现和失效剔除等功能,帮助构建弹性、高可用的分布式系统。在现代软件开发领域,使用 Eureka 可以有效地管理和监控服务实例,实现服务之…

网络安全综合实验

1.实验拓扑 在这里注意因为第四个要求配置双击热备&#xff0c;我们可以第一时间配置&#xff0c;避免二次重复配置消耗时间 4、FW1和FW3组成主备模式的双机热备 具体配置位置在系统-->高可靠性-->双机热备-->配置 这里上行链路有两组&#xff0c;分别为电信和移动&…

Sora后观察:AI大模型产业落地的八个锚点

在正在进行的2024年&#xff0c;国内大模型也将更下沉和落地&#xff0c;在技术上的突破之外&#xff0c;也会出现更多的向下的产业兼容和产业实践案例&#xff0c;作为新质生产力推动产业数字化转型的航船加速前进。 作者|斗斗 编辑|皮爷 出品|产业家 “电影讲述了一名…

期权无风险套利策略[2]—牛市垂直价差套利

牛市垂直价差 牛市垂直价差可以分为牛市看涨期权价差策略与牛市看跌期权价差策略。 其中&#xff0c;牛市看涨价差策略是指投资者买入较低行权价的认购期权、同时卖出数量较高行权价的同月认购期权。 牛市看跌价差策略同理&#xff0c;将看涨期权换成看跌期权即可。 牛市价…

分布式id实战

目录 常用方式 特征 潜在问题 信息安全 高性能 UUID 雪花算法 数据库生成 美团Leaf方案 Leaf-segment 数据库方案 Leaf-snowflake 方案 常用方式 uuid雪花算法数据库主键 特征 全局唯一趋势递增信息安全 潜在问题 信息安全 如果id连续递增, 容易被爬虫, 批量下…

汽车控制器软件正向开发

需求常见问题: 1.系统需求没有分层,没有结构化,依赖关系不明确 2.需求中没有验证准则 3.对客户需求的追溯缺失,不完整,颗粒度不够 4.系统需求没有相应的系统架构,需求没有分解到硬件和软件 5.需求变更管控不严格,变更频繁,变更纪录描述不准确,有遗漏,客户需求多…

SpringBoot配置文件日志

目录 一、SpringBoot配置文件的作用 二、SpringBoot配置文件的分类 1、application.properties 2、application.yml 3、application.yaml 三、使用配置文件实例--验证码 1、使用Kaptcha插件生成验证码 2、网页需求分析 3、前端页面 4、发送请求 5、服务器作出响应 …

VUE3 中导入Visio 图形

微软的Visio是一个功能强大的图形设计工具&#xff0c;它能够绘制流程图&#xff0c;P&ID&#xff0c;UML 类图等工程设计中常用的图形。它要比其它图形设计软件要简单许多。以后我的博文中将更多地使用VISO 来绘制图形。之前我一直使用的是corelDraw。 Visio 已经在工程设…

grid新建主从一对多

目录 总结一、步骤前端1.第一步-编写tabs的modelBody2.第二步编辑表扩展js 后端--重写表的add和Update方法1.第一步 总结 编写tabs的modelBody后编辑表扩展js在重写后端partial的Service 一、步骤 前端 1.第一步-编写tabs的modelBody 复制下面代码该改的改 <template&…

猫头虎分享: All in AI时代来临,作为程序员我们应该做些什么?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …