java实体类为什么要写.toString()方法?
前言:之前在做项目时,写实体类时,发现大多数都会在里面写上.toString()方法,至于原因,我大概总结以下几点。
首先了解一下相关的知识:
**1.在Java中每个类都默认继承Object类,除非声明继承于某个类。
而toString 方法来自于Object 类,作用是:
toString()方法是在Object类里面的方法,它返回的是String型的数据:类名+@+哈希值的16进制形式,以下是toString的源码:
`public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
可以做一个例子来看下效果:
```java
package controller;
public class Test3 {
public static void main(String[] args) {
final User user = new User();
System.out.println(user.toString());
}
}`**
最后输出结果为;controller.User@1b6d3586
#2.我们来解析下toString()方法,
getClass().getName()+"@"+Integer.toHexString(hashCode())
1)getClass().getName()代表返回对象所属类的包名.类名,即pers.day02.Anima。
2)@对应@;
3)Integer.toHexString(hashCode())代表将对象的哈希值用16进制表示,其中hashCode()代表返回该对象的哈希值。
3.然而,在实际开发中,通常希望toString()方法返回的不只是基本信息,所以Object的toString()方法通常会被重写
#3.结合项目实验:
新建User.java:
package controller;
public class User {
private int id;
private String name;
private String password;
public User() {
}
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
再来建一个测试类:
package controller;
public class Test3 {
public static void main(String[] args) {
final User user = new User();
System.out.println(user.toString());
}
}
- 当没有toString()方法时,输出结果为:
controller.User@1b6d3586
很显然,返回的是一串数字,而我们这要是在项目开发的时候,不应该是一串看不懂的数字,而应该是符合逻辑的东西;
当加上toString()方法后,输出结果为:
User{id=0, name=‘null’, password=‘null’}
返回的就是我们正常的业务代码。这也就是为什么我们在写java实体类的时候,往往要返回的是对象和值,所以习惯性都要加一个tostring方法的原因;
** - 总结:
1.重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。
2. 如果在类中没有重写ToString方法,默认使用的是Object的toString方法输出格式。这个时候,对象就会直接显示hash码。
3.如果在类中重写toString方法,那么输出格式就会按照我们定义的方式输出这个对象,因此可以这样理解:
1》重写toString是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。
2》当你print一个对象是你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。**
原文链接:https://blog.csdn.net/itbiggod/article/details/79290332