🗒️重写toString()
Mar 26, 2024
| Apr 1, 2024
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password

什么是toString()?

toString()方法在Java中是一个特殊的方法。它被定义在Object类中,而Object类是所有Java类的父类。这意味着每个Java对象都有一个toString()方法。此方法的主要用途是返回一个代表对象的字符串。当您尝试打印一个对象或者以字符串的形式表达一个对象时(例如,在字符串连接操作中),Java自动调用该对象的toString()方法。

重写toString()

重写toString()指的是在自定义类中提供toString()方法的一个新的实现版本。通过重写toString()方法,当对象被打印时(例如使用System.out.println()),可以返回一个包含对象属性值和其他重要状态信息的字符串,这使得对象的状态在打印或记录时更容易被人理解。这对于调试非常有帮助,因为你可以快速看到对象的当前状态而不是仅仅一个哈希码。此外,这也使得对象在日志记录、消息传递或简单的输出时更加直观。
例如,考虑一个名为Person的类,它有两个属性:name和age。如果我们重写了Person类的toString()方法,我们可以让它返回一个包含姓名和年龄信息的字符串:
输出结果
Object类的子类Person类中重写toString()
输出结果
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
【重写规范】
  1. 必须被声明为 public
  1. 返回类型为 String
  1. 方法的名称必须为 toString,且无参数。
  1. 方法体中不要使用输出方法 System.out.println()
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

例外:数组不能重写toString()

在Java中,数组(Array)是一个特殊的对象类型,它的行为在某些方面与普通的Java对象不同。其中一个特殊的方面就是数组类是由Java虚拟机(JVM)在运行时动态生成的,而不是作为标准Java类库的一部分。这意味着,虽然数组继承自Object类,但是数组类型并没有在Java源代码中作为一个正常的类来定义。因此,你不能像扩展其他普通Java类那样来扩展或修改数组类的行为,包括不能重写它们的toString()方法。
这种设计是出于性能和内存使用效率的考虑:数组在Java中非常基础,被广泛使用,如果每个数组都像普通对象那样完全实现,将会对性能产生负面影响。因此,Java设计者选择让虚拟机直接处理数组类型,而这就导致了数组类行为的一些限制,包括不能重写默认的toString()方法。
这就是为什么当你尝试打印一个数组时,默认情况下,你看到的是由Object类提供的toString()实现的结果,它只是简单地返回类名和实例的哈希码,并不是数组内容。如果要打印数组内容,通常需要使用Java标准库提供的工具类,如Arrays.toString()Arrays.deepToString()
  1. Arrays.toString():这个方法用于将一维数组转换为字符串。它会遍历数组中的每个元素,将它们转换为字符串,并用逗号和空格将它们分隔开,所有这些元素被包括在一对方括号[]中。例如,如果你有一个整型数组int[] arr = {1, 2, 3};,调用Arrays.toString(arr)将返回字符串"[1, 2, 3]"
  1. Arrays.deepToString():这个方法用于将多维数组转换为字符串,尤其是嵌套数组(例如二维数组或更高维度的数组)。它不仅处理外层数组,还会递归处理每一个内层数组,确保多维数组的每个元素都被适当地转换为字符串。比如说,对于一个二维整型数组int[][] arr = {{1, 2}, {3, 4}, {5, 6}};,调用Arrays.deepToString(arr)将返回字符串"[[1, 2], [3, 4], [5, 6]]"
【补充】“Arrays”和“Array”代表不同的概念,注意区分: Arrays(数组工具类):Arrays是java.util包中的一个工具类,它提供了一系列静态方法来帮助处理数组,比如排序(sort)、查找(binarySearch)、比较(equals)、填充(fill)以及将数组转换成字符串(toString和deepToString)。这个类是专门设计来方便数组操作的,它不能被实例化,也就是说,你不能创建一个Arrays类型的对象。 Array(数组实例):在Java中,"Array"并不是一个特定的类名,而是指由相同类型元素组成的一种数据结构,可以存储多个数据。数组可以是一维的,也可以是多维的。数组是通过在声明变量时使用方括号[]来创建的,例如int[] myIntArray = new int[10];或者String[][] myStringArray = new String[5][5];。java中没有一个名为“Array”的单独类,这个词通常被用来指代由多个元素组成的集合。
  • java
  • java basics
  • java异常处理static关键字
    Catalog