toString方法和equals方法

一、toString方法

获得对象的一种字符串形式,默认的字符串格式为: 全类名@十六进制内存地址

public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }

print/println方法默认调用参数对象的toString()方法

public class BankAccount {
    private String name;
    private String sfz;
    public BankAccount(String name, String sfz) {
        super();
        this.name = name;
    this.sfz = sfz;
    }
    //注解 是一种注释 是给JVM看的
    //@Override 标准修饰的方法是一个重写的方法,如果不符合重写的语法,报错
    @Override
    public String toString() {
        return "姓名:"+name+",身份证:"+sfz;
    }
}
public static void main(String[] args) {
    BankAccount account = new BankAccount("jack","23010199901011111");
    System.out.println(account);
}

二、equals方法

先理解 == 的概念,比较两边的值是否相等

int i = 3;
int j = 4;
System.out.println(i==j);
BankAccount account1 = new BankAccount("jack","23010199901011111");
BankAccount account2 = new BankAccount("jack","23010199901011111");
//比较两个引用的地址是否相同
System.out.println(account1==account2);

equals 指示某个其他对象是否与此对象“相等”。默认的比较规则是比较两个对象是否== ,程序员可以通过重写 equals自定义比较的规则。

//对BankAccout类的equals方法重写 ,两个银行账号比较身份证和姓名 相同,就是同一个账号

public class BankAccount {
    private String name;
    private String sfz;
    public BankAccount(String name, String sfz) {
        super();
        this.name = name;
        this.sfz = sfz;
    }
    //注解 是一种注释 是给JVM看的       
    //@Override 标准修饰的方法是一个重写的方法,如果不符合重写的语法,报错
    @Override
    public String toString() {
        return "姓名:"+name+",身份证:"+sfz;
    }
    @Override
    public boolean equals(Object obj) {
        if(this==obj) {
            return true;
        }
        if(obj instanceof BankAccount) {
            BankAccount ba = (BankAccount)obj;
            if(this.name.equals(ba.name)&&this.sfz.equals(ba.sfz)) {
                return true;
            }
        }
        return false;
    }
}
public static void main(String[] args) {
    int i = 3;
    int j = 4;
    System.out.println(i==j);
    BankAccount account1 = new BankAccount("jack","23010199901011111");
    BankAccount account2 = new BankAccount("jack","23010199901011111");
    System.out.println(account1.equals(account2));
    /*String s1 = new String("abc");
    String s2 = new String("abc");
    System.out.println(s1==s2); //false
    //String类重写了equals方法,两个字符串的比较 ,应该比较的是内容。
    System.out.println(s1.equals(s2)); //true
*/

字符串的equals比较的是两个字符串的内容是否相同

经验分享 程序员 微信小程序 职场和发展