参考链接: 在Java中重写toString()

前言: 在你兴高采烈的写完一个类,创建测试类时,创建对象,传入参数,调用对象,以为会得到参数值,但突然发现输出的是“ 类名@什么东东?(其实是散列码,也是16进制的哈希值哈)”,反复检查代码,但不知怎么修改。我不知道你们有没有这种情况发生,但是我经常就有,原因当然是因为不习惯重写toString方法和基础知识还不足导致的啦。还是要加油呀!所以记录一下学习的toString()方法。

1.1 在Object类中有一个重要的方法:toString()方法。

作用:用于返回表示对象值的字符串

1.2 为啥要重写toString方法呢?

Object类中的toString方法返回的是什么呢?我们打开toString源码发现:

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

返回的字符串是:类名@散列码。 那为什么其它类的对象返回的也是这样的形式呢?因为所有的类的超类都是Object类。(可在类中按住ctrl+t查看继承关系)

例如: 创建一个People类:

public class People {

private String name;

private int age;

public People(String name,int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

测试类:

/**

* toString方法的调用

* @懒惰的小黑

*

*/

public class toStringTest {

public static void main(String[] args) {

People p = new People("懒惰的小黑",20);

System.out.println(p);              //p会自动调用toString方法

System.out.println(p.toString());    //手动调用

}

}

执行结果: com.xiaohei.text.People@279f2327 com.xiaohei.text.People@279f2327

但是你想输出的并非是这样的结果,而是想输出对象的具体描述(name和age),所以需要在类中重写toString方法。 重写toString方法:

public String toString() {

return "[name = " + getName() + ",age = "+ getAge() + "]";

}

测试:

People p = new People("懒惰的小黑",20);

System.out.println(p);              //p会自动调用toString方法

执行结果: [name = 懒惰的小黑,age = 20]

实际上,还可以设计的更好一些。最好通过getClass().getName() + 类的描述:获取类名的字符串(地址)+类的描述。 例:

public String toString() {

return getClass().getName() + "[name = " + getName() + ",age = "+ getAge() + "]";

}

测试: 同上例 执行结果: com.xiaohei.text.People[name = 懒惰的小黑,age = 20]

注意: 此处的getClass().getName()中的getName并非People类中的getName方法!

1.3 toString方法也可供子类使用,子类只需调用super.toString()。

例如: 创建子类:

class Teachers extends People{

private int salary;

public Teachers(String name, int age,int salary) {

super(name, age);

this.salary = salary;

}

public int getSalary() {

return salary;

}

public void setSalary(int salary) {

this.salary = salary;

}

public String toString() {

return super.toString() + ",salary = " + getSalary();

}

}

测试:

public class toStringTest {

public static void main(String[] args) {

Teachers t = new Teachers("懒惰的小黑",20,5000);

System.out.println(t);

}

}

执行结果: [name = 懒惰的小黑,age = 20],salary = 5000

1.4 数组类型调用toString()方法

数组继承了Object类中的toString方法,数组类型会按旧格式打印。

例如:

public class ArraytoStringTest {

public static void main(String[] args) {

int[] a = {5,6,2,1,3};

System.out.println(a);            //自动调用toString方法

执行结果:[I@1f32e575 注:[I 表明是一个整形数组。

所以我们需要调用Array.toString 方法 例如:

import java.util.Arrays;

public class ArraytoStringTest {

public static void main(String[] args) {

int[] a = {5,6,2,1,3};

String a1 = Arrays.toString(a);

System.out.println(a1);

}

}

执行结果:[5, 6, 2, 1, 3]

说明:为什么会出现这种形式呢?按住ctrl点击toString方法,查看源码:

public static String toString(int[] a) {

if (a == null)

return "null";

int iMax = a.length - 1;

if (iMax == -1)

return "[]";

StringBuilder b = new StringBuilder();

b.append('[');

for (int i = 0; ; i++) {

b.append(a[i]);

if (i == iMax)

return b.append(']').toString();

b.append(", ");

}

}

注意:打印多维数组则需调用Arrays.deepToString()方法

总结提醒:建议类中都要重写toString方法,方便后面程序员的调用!

[转载] java重写toString()方法相关推荐

  1. Java重写toString()方法的意义

    1.重写toString()方法的作用: 其实对于一般的对象来说都会有这个方法,这个方法的目的,主要就是将对象按字符串的方式输出出来,用白话说就是:使用文字描述这个对象里各个变量是什么值 ,这个变量是 ...

  2. [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍

    参考链接: 可以重写Java中的私有方法吗 JAVA面向对象之代码块与继承 代码块分类 局部代码块 作用:限制变量生命周期 书写位置:在方法中 构造代码块 开发中很少使用 书写位置:类中  方法外 调 ...

  3. java实体类如果不重写toString方法,会如何?

    先认识一下Object Object 类的 toString 方法 返回一个字符串,该字符串由类名(对象是该类的一个实例).at 标记符"@"和此对象哈希码的无符号十六进制表示组成 ...

  4. java中的tostring_java 中重写toString()方法

    toString()方法 一般出现在System.out.println(类名.toString()); toString()是一种自我描述方法 本身返回的是 getClass().getName() ...

  5. Java基础——重写toString()方法

    1.Object()类的toString() Java默认的toString方法来自Object类 在Java中每个类都直接或者间接继承Object类,toString()方法同样是来自于Object ...

  6. 【java基础】为什么重写toString()方法?

    不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写toString() 方法,可能是口头知道也可能是跟风随带添加toString() 方法,并没有真正理解其意义,如果真要被问起来 ...

  7. java 默认tostring_【java基础】为什么重写toString()方法?

    不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写toString() 方法,可能是口头知道也可能是跟风随带添加toString() 方法,并没有真正理解其意义,如果真要被问起来 ...

  8. java tostring 父类_java重写toString()方法

    toString()方法是Object类的方法,调用toString()会返回对象的描述信息. 1)为什么重写toString()方法呢? 如果不重写,直接调用Object类的toString()方法 ...

  9. 如何:重写 ToString 方法(C# 编程指南)

    如何:重写 ToString 方法(C# 编程指南) C# 中的每个对象都继承 ToString 方法,此方法返回该对象的字符串表示形式.例如,所有 int 类型的变量都有一个 ToString 方法 ...

最新文章

  1. 设备物理像素、设备独立像素
  2. 运动会加油稿计算机学院150字,大学运动会加油稿150字左右
  3. Java反射机制及API使用
  4. (转载)conflicting types for xx各种错误的总结
  5. 调试U-Boot笔记(一)
  6. Git回滚操作的总结
  7. 分割法和填补法_“聚合”法与“分割”法
  8. 分布式深度学习,93页ppt概述最新DDL技术发展
  9. opencv光流例程_OpenCV 4.4 发布!新增YOLOv4 和 EfficientDet 推断支持
  10. python——若一个list中的元素都是dict,要获取该list中的某个dict中的某个value所在的dict在list中的索引
  11. Java 1.4 大数值问题
  12. 数控机床手动编程能否用计算机验证,数控编程的方法有几种_数控编程的步骤...
  13. Qt之控件资源标识的含义
  14. 使用FFmpeg类库实现YUV视频序列编码为视频
  15. ArcGIS Engine开发之旅01---产品组成、逻辑体系结构
  16. spring-第十一篇之SpEL表达式
  17. 2022年北京航空航天大学计算机考研复试分数线
  18. java自动机字符串匹配_字符串匹配之有限自动机
  19. 如何在 Mac 上更改文件夹颜色,改变 mac 文件夹颜色教程
  20. matlab从无到有系列(二):矩阵运算基础

热门文章

  1. 南通大学计算机系本二,2012年南通大学计算机科学与技术学院江苏省内第二批本科(院校代码:1301)...
  2. oracle nvarchar2 字符集不匹配,Oracle中NVARCHAR2字符集不匹配问题
  3. mysql rpm 安装6_linux6.5 RPM方式安装 mysql5.6
  4. Linux基础命令(1)
  5. html5语义化标签 加粗,html5标签 H5标签
  6. python在浏览器运行一片空白_Webdriver启动Firefox浏览器后,页面显示空白
  7. linux同时安装python2和python3_linux-Centos7安装python3并与python2共存
  8. JDK源码解析之 Java.lang.StringBuffer
  9. MIP技术进展月报第2期: 数据绑定,异步脚本加速
  10. boost序列化(Serialization)