[转载] java重写toString()方法
参考链接: 在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()方法相关推荐
- Java重写toString()方法的意义
1.重写toString()方法的作用: 其实对于一般的对象来说都会有这个方法,这个方法的目的,主要就是将对象按字符串的方式输出出来,用白话说就是:使用文字描述这个对象里各个变量是什么值 ,这个变量是 ...
- [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍
参考链接: 可以重写Java中的私有方法吗 JAVA面向对象之代码块与继承 代码块分类 局部代码块 作用:限制变量生命周期 书写位置:在方法中 构造代码块 开发中很少使用 书写位置:类中 方法外 调 ...
- java实体类如果不重写toString方法,会如何?
先认识一下Object Object 类的 toString 方法 返回一个字符串,该字符串由类名(对象是该类的一个实例).at 标记符"@"和此对象哈希码的无符号十六进制表示组成 ...
- java中的tostring_java 中重写toString()方法
toString()方法 一般出现在System.out.println(类名.toString()); toString()是一种自我描述方法 本身返回的是 getClass().getName() ...
- Java基础——重写toString()方法
1.Object()类的toString() Java默认的toString方法来自Object类 在Java中每个类都直接或者间接继承Object类,toString()方法同样是来自于Object ...
- 【java基础】为什么重写toString()方法?
不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写toString() 方法,可能是口头知道也可能是跟风随带添加toString() 方法,并没有真正理解其意义,如果真要被问起来 ...
- java 默认tostring_【java基础】为什么重写toString()方法?
不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写toString() 方法,可能是口头知道也可能是跟风随带添加toString() 方法,并没有真正理解其意义,如果真要被问起来 ...
- java tostring 父类_java重写toString()方法
toString()方法是Object类的方法,调用toString()会返回对象的描述信息. 1)为什么重写toString()方法呢? 如果不重写,直接调用Object类的toString()方法 ...
- 如何:重写 ToString 方法(C# 编程指南)
如何:重写 ToString 方法(C# 编程指南) C# 中的每个对象都继承 ToString 方法,此方法返回该对象的字符串表示形式.例如,所有 int 类型的变量都有一个 ToString 方法 ...
最新文章
- 设备物理像素、设备独立像素
- 运动会加油稿计算机学院150字,大学运动会加油稿150字左右
- Java反射机制及API使用
- (转载)conflicting types for xx各种错误的总结
- 调试U-Boot笔记(一)
- Git回滚操作的总结
- 分割法和填补法_“聚合”法与“分割”法
- 分布式深度学习,93页ppt概述最新DDL技术发展
- opencv光流例程_OpenCV 4.4 发布!新增YOLOv4 和 EfficientDet 推断支持
- python——若一个list中的元素都是dict,要获取该list中的某个dict中的某个value所在的dict在list中的索引
- Java 1.4 大数值问题
- 数控机床手动编程能否用计算机验证,数控编程的方法有几种_数控编程的步骤...
- Qt之控件资源标识的含义
- 使用FFmpeg类库实现YUV视频序列编码为视频
- ArcGIS Engine开发之旅01---产品组成、逻辑体系结构
- spring-第十一篇之SpEL表达式
- 2022年北京航空航天大学计算机考研复试分数线
- java自动机字符串匹配_字符串匹配之有限自动机
- 如何在 Mac 上更改文件夹颜色,改变 mac 文件夹颜色教程
- matlab从无到有系列(二):矩阵运算基础
热门文章
- 南通大学计算机系本二,2012年南通大学计算机科学与技术学院江苏省内第二批本科(院校代码:1301)...
- oracle nvarchar2 字符集不匹配,Oracle中NVARCHAR2字符集不匹配问题
- mysql rpm 安装6_linux6.5 RPM方式安装 mysql5.6
- Linux基础命令(1)
- html5语义化标签 加粗,html5标签 H5标签
- python在浏览器运行一片空白_Webdriver启动Firefox浏览器后,页面显示空白
- linux同时安装python2和python3_linux-Centos7安装python3并与python2共存
- JDK源码解析之 Java.lang.StringBuffer
- MIP技术进展月报第2期: 数据绑定,异步脚本加速
- boost序列化(Serialization)