Java toString方法——学习记录

文章讲述了Java中对象的toString方法默认返回内存地址,但在实际开发中通常需要根据对象属性定制返回内容,因此需要重写此方法。文中通过Person类的例子展示了如何重写toString,并展示了未重写toString的Random和Scanner类以及已重写的ArrayList例子。
摘要由CSDN通过智能技术生成

Java toString方法

方法摘要

  • public String toString():返回该对象的字符串表示。

toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

覆盖重写

如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。
例如自定义的Person类:

import java.util.Objects;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    /*
    * 直接打印兑现高的地址值没有意义,所以需要重写Object类的toString方法
    * 打印对象的属性(name,age)
    * */

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", 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;
    }
}

在IntelliJ IDEA中,可以点击Code菜单中的Generate...,也可以使用快捷键alt+insert,点击toString()选项

代码片段:

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/*
java.lang.Object`类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类,	那么默认则继承自Object类
*/
public class Demo01ToString {
    public static void main(String[] args) {
        /*
        Person类默认继承了Object类,所以可以使用Object类中的toString方法
        String toString() 返回该对象的字符串表示
        */
        Person p = new Person("张三",18);
        String s = p.toString();
        System.out.println(s);
        //直接打印对象的名字,其实就是调用对象的toString方法 p = p.toString();
        System.out.println(p);
        /*
             看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可
             如果没有对象的toString方法,那么打印的就是对象的地址值(默认)
             如果重写toString方法,那么就按照重写的方法打印
        */
        Random r = new Random();
        System.out.println(r);//java.util.Random@4554617c 没有重写toString方法

        Scanner sc = new Scanner(System.in);
        System.out.println(sc );//Java.util.Scanner[delimiters=\p{javaWhitespace...重写了toString方法

        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        System.out.println(list);//重了写toString方法

    }


}

输出结果:

Person{name='张三', age=18}
Person{name='张三', age=18}
java.util.Random@4554617c
java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Q∞\E]
[1, 2]

如有建议和补充,欢迎联系!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值