【Java】对象与toString()方法

1.前言

了解toString之前,要先明白Object类是什么,Object是所有对象的父类。在Object类当中含有toString()方法,因此所有的对象也都包含有一个toString()方法。

2.toString

2.1 方法调用

toString()方法主要的作用,是对类与对象的信息进行描述。

首先打印一个类中的成员。

class Students{
    public String name;
    public int age;

    public Students(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

public class MyClass {
    public static void main(String[] args) {
        Students students = new Students("ZhangSan",90);
        System.out.println(students);//Students{name='ZhangSan', age=90}
        System.out.println(students.toString);

    }
}

com.example.java_learn_string.Students@504bae78

com.example.java_learn_string.Students@504bae78

2.3 hashCode

我们发现打印的确实是学生类,但是后面加上了@和一些乱码

当对对象进行打印输出的时候,可以发现,直接输出对象与调用对象的toString()方法产生的效果是一致的。
因为当去输出对象的时候,调用的也是对象的toString()方法,只不过不可见。
当使用toString()方法对对象进行描述的时候,它输出的格式是,类名+@+hashCode值。
hashCode是通过将对象的地址转换成一个整数来实现的。 

我们可以通过函数进行直接打印hashCode

        System.out.println(students.hashCode());
        System.out.println(Integer.toHexString(students.hashCode()));

1347137144
504bae78

-------------------------------------------------------------------------------------------------------------------------
hashCode是通过将对象的地址转换成一个整数来实现的。
hashCode();返回的是一个十进制的整数值,而toString()方法当中打印输出的是一个十六进制的值,它们是相同的。所以将hashCode的值进行类型转换,得到的就是与上面@后面相同的值

所以,ToString是对成员详细信息的描写,我们可以将他进行重写来提高代码的可读性。

2.4 重写ToString

在Students类中按住ALT+insert键呼出Generate选项栏,也可以右键。点击toString,全选来对所有的成员进行信息描述。

    @Override
    public String toString() {
        return "Students{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

再次让程序执行,可读性就提高很多

class Students{
    public String name;
    public int age;

    public Students(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Students{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class MyClass {
    public static void main(String[] args) {
        //将一整个学生类转变为字符串
        String s4 = String.valueOf(new Students("LiHua",14));
        System.out.println(s4);//Students{name='LiHua', age=14}
        Students students = new Students("ZhangSan",90);
        System.out.println(students);//Students{name='ZhangSan', age=90}
        System.out.println(students.toString());
        System.out.println(students.hashCode());
        System.out.println(Integer.toHexString(students.hashCode()));
    }
}

> Task :Java_learn_String:MyClass.main()
Students{name='LiHua', age=14}
Students{name='ZhangSan', age=90}
Students{name='ZhangSan', age=90}
248609774
ed17bee

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值