欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Object类的toString() 方法和equals()方法

程序员文章站 2022-03-18 11:32:29
...

Object类的toString() 方法和equals()方法
Object类的toString()方法显示的不直观,建议子类重写。
Object类的equals比较的是地址值,如果要比较内容,建议子类重写。而作为Object的子类String已经重写类toString()的方法,所以再其他子类重写的时候可以直接调用String中的toString()方法或者是模仿。

以下内容为转载:https://www.cnblogs.com/lh-cml/p/11058993.html
toString()和equals()方法详解
一:toString()方法

Object中toString方法

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

返回的值: 类名aaa@qq.com+十六位的hashCode值

通常使用的toString()方法是利用重写覆盖Object中的toString()方法,自定义toString方法。

复制代码

public class Animal {
    String name;
    
    int age;
//重写的toString()方法,返回的是name和age
    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

复制代码

二:equals()方法

Java中 “==” 比较:如果是基本数据类型比较的是值,如果是引用数据类型比较的是地址。

(1)Object中equals方法:

    public boolean equals(Object obj) {
      return (this == obj);
    }

(2)String中重写的equals方法:(比较两字符串的值是否相等)

复制代码

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
//instanceof表示判断左边的对象是否是右边类或子类的的对象
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

复制代码
(3)自定义比较规则,重写equals方法。

package com.lwh.test02;

public class Student {

	private String name;
	private int 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;
	}
	
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
		
}

name.equals(other.name) 就是String的equals()方法。
而String的equals()内容就是如下

    public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}
	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }
相关标签: java基础