java实体类为什么要写.toString()方法?

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());
    }
}
  1. 当没有toString()方法时,输出结果为:
    controller.User@1b6d3586
    很显然,返回的是一串数字,而我们这要是在项目开发的时候,不应该是一串看不懂的数字,而应该是符合逻辑的东西;
    当加上toString()方法后,输出结果为:
    User{id=0, name=‘null’, password=‘null’}
    返回的就是我们正常的业务代码。这也就是为什么我们在写java实体类的时候,往往要返回的是对象和值,所以习惯性都要加一个tostring方法的原因;

    **
  2. 总结:
    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

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值