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());
    }

返回的值: 类名+@+十六位的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;
    }

猜你喜欢

转载自blog.csdn.net/yemenlinweihan/article/details/104111553