java实体类重写.toString()方法
1. 前言
笔者在做javaweb项目时候,***M+maven+easyui,然后在写java实体类的时候,发现大家都要写tostring方法,那么为什么java实体类都要写.toString()方法?于是顺便在这里记录一下。
2. 了解
在Java中每个类都默认继承Object类,除非声明继承于某个类。
而toString 方法来自于Object 类,作用是:
返回一个字符串,是该Java对象的内存地址经过哈希算法得出的int类型的值在转换成十六进制。
换句话说,该方法返回一个字符串,它的值大概就是等于:
1
getClass().getName()+’@’+Integer.toHexString(hashCode())
这是一个内存地址经过哈希算法得出的int类型的值在转换成十六进制的东西。等同的看作Java对象在堆中的内存地址。
例如:
package com.zout.toString;
public class Test {
public static void main(String[] args){
Object zt = new Object();
System.out.println(zt.toString());
}
}
1
2
3
4
5
6
7
输出结果:java.lang.Object@7852e922
1
这是直接使用tostring的时候返回的东西。
3. 实验
那么在定义一个实体类后,不写tostring,返回的结果又会是什么呢?
1
新建toStringTest.java:
package demoTest_zt;
/**
*@class_name:toStringTest
*@param: java实体类重写tostring方法的测试
*@return:
*@author:Zoutao
*@createtime:2017年9月11日
*/
public class toStringTest {
private String name;
private String sex;
private int No;
public void Show(){
System.out.println("这是没有tostring重写实体类的时候!");
}
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 getNo() {
return No;
}
public void setNo(int no) {
this.No = no;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
再写一个Ceks_tostring.java主函数调用:
package demoTest_zt;
/**
*@class_name:toStringTest
*@param: java实体类重写tostring方法的测试调用
*@return:
*@author:Zoutao
*@createtime:2017年9月11日
*/
public class Ceks_tostring {
public static void main(String[] args) {
Class<?> demo= null;
try {
//包-类路径 demo=Class.forName("demoTest_zt.Ceks_tostring");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
toStringTest test= new toStringTest();
test.setName("zout");
test.setNo(001);
test.setSex("man");
test.Show();
System.out.println("调用实体类返回的是:" +test);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
运行结果:
这是没有tostring重写实体类的时候!
调用实体类返回的是:demoTest_zt.toStringTest@15db9742
1
2
很显然这要是在项目开发的时候,不应该是一串看不懂的数字,而应该是符合逻辑的东西;
接下来测试带有tostring方法的时候,Object中的toString方法就要被重写。
在toStringTest.java的最底下添加toString方法:
//重写tostring方法
@Override
public String toString() {
return "toStringTest [name=" + name + ", sex=" + sex + ", No=" + No + "]";
}
1
2
3
4
5
然后在运行主函数测试:
输出结果:
这是有tostring重写实体类的时候!
调用实体类返回的是:toStringTest [name=zout, sex=man, No=1]
1
2
返回的就是我们正常的业务代码。这也就是为什么我们在写java实体类的时候,往往要返回的是对象和值,所以习惯性都要加一个tostring方法的原因;
4. 总结
重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。
如果在类中没有重写ToString方法,默认使用的是Object的toString方法输出格式。这个时候,对象就会直接显示hash码。
如果在类中重写toString方法,那么输出格式就会按照我们定义的方式输出这个对象,因此可以这样理解:
重写toString是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。
当你print一个对象是你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。
————————————————
版权声明:本文为CSDN博主「江湖一点雨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/itbiggod/article/details/79290332
1. 前言
笔者在做javaweb项目时候,***M+maven+easyui,然后在写java实体类的时候,发现大家都要写tostring方法,那么为什么java实体类都要写.toString()方法?于是顺便在这里记录一下。
2. 了解
在Java中每个类都默认继承Object类,除非声明继承于某个类。
而toString 方法来自于Object 类,作用是:
返回一个字符串,是该Java对象的内存地址经过哈希算法得出的int类型的值在转换成十六进制。
换句话说,该方法返回一个字符串,它的值大概就是等于:
1
getClass().getName()+’@’+Integer.toHexString(hashCode())
这是一个内存地址经过哈希算法得出的int类型的值在转换成十六进制的东西。等同的看作Java对象在堆中的内存地址。
例如:
package com.zout.toString;
public class Test {
public static void main(String[] args){
Object zt = new Object();
System.out.println(zt.toString());
}
}
1
2
3
4
5
6
7
输出结果:java.lang.Object@7852e922
1
这是直接使用tostring的时候返回的东西。
3. 实验
那么在定义一个实体类后,不写tostring,返回的结果又会是什么呢?
1
新建toStringTest.java:
package demoTest_zt;
/**
*@class_name:toStringTest
*@param: java实体类重写tostring方法的测试
*@return:
*@author:Zoutao
*@createtime:2017年9月11日
*/
public class toStringTest {
private String name;
private String sex;
private int No;
public void Show(){
System.out.println("这是没有tostring重写实体类的时候!");
}
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 getNo() {
return No;
}
public void setNo(int no) {
this.No = no;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
再写一个Ceks_tostring.java主函数调用:
package demoTest_zt;
/**
*@class_name:toStringTest
*@param: java实体类重写tostring方法的测试调用
*@return:
*@author:Zoutao
*@createtime:2017年9月11日
*/
public class Ceks_tostring {
public static void main(String[] args) {
Class<?> demo= null;
try {
//包-类路径 demo=Class.forName("demoTest_zt.Ceks_tostring");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
toStringTest test= new toStringTest();
test.setName("zout");
test.setNo(001);
test.setSex("man");
test.Show();
System.out.println("调用实体类返回的是:" +test);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
运行结果:
这是没有tostring重写实体类的时候!
调用实体类返回的是:demoTest_zt.toStringTest@15db9742
1
2
很显然这要是在项目开发的时候,不应该是一串看不懂的数字,而应该是符合逻辑的东西;
接下来测试带有tostring方法的时候,Object中的toString方法就要被重写。
在toStringTest.java的最底下添加toString方法:
//重写tostring方法
@Override
public String toString() {
return "toStringTest [name=" + name + ", sex=" + sex + ", No=" + No + "]";
}
1
2
3
4
5
然后在运行主函数测试:
输出结果:
这是有tostring重写实体类的时候!
调用实体类返回的是:toStringTest [name=zout, sex=man, No=1]
1
2
返回的就是我们正常的业务代码。这也就是为什么我们在写java实体类的时候,往往要返回的是对象和值,所以习惯性都要加一个tostring方法的原因;
4. 总结
重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。
如果在类中没有重写ToString方法,默认使用的是Object的toString方法输出格式。这个时候,对象就会直接显示hash码。
如果在类中重写toString方法,那么输出格式就会按照我们定义的方式输出这个对象,因此可以这样理解:
重写toString是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。
当你print一个对象是你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。
————————————————
版权声明:本文为CSDN博主「江湖一点雨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/itbiggod/article/details/79290332