32--Object类

Object类是所有Java类的根父类 。默认情况下:一个类如果不继承任何类,则默认继承Object类。
实例1:以下两种代码等价

package com.qwy;

public class Users {
    
    
	//属性
	//方法
}

package com.qwy;

public class Users extends Object{
    
    
	//属性
	//方法
}

Object类中的equals()方法:

package com.qwy;

class Users{
    
    
	private String name;
	private int age;
	public Users() {
    
    
		// TODO Auto-generated constructor stub
	}
	
	public Users(String name, int age) {
    
    
		super();
		this.name = name;
		this.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;
	}
	
}
public class TestObject{
    
    
	public static void main(String[] args) {
    
    
		Users  users1= new Users("张三", 12);
		Users  users2= new Users("张三", 12);
		System.out.println(users1.equals(users2));//false
	}
}

运行结果:false

实例2:==

package com.qwy;

class Users{
    
    
	private String name;
	private int age;
	public Users() {
    
    
		// TODO Auto-generated constructor stub
	}
	
	public Users(String name, int age) {
    
    
		super();
		this.name = name;
		this.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;
	}
	
}
public class TestObject{
    
    
	public static void main(String[] args) {
    
    
		Users  users1= new Users("张三", 12);
		Users  users2= new Users("张三", 12);
		System.out.println(users1==users2);//false
	}
}

查看Object类中equals()源码如下:

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

所有类都继承了Object,也就获得了equals()方法。**==**比较基本数据类型时,比较的是栈内存中的值(内容);比较引用数据类型时,默认比较的是内存地址引用。
==比较基本数据类型:

package com.qwy;


public class TestDemo {
    
    
	public static void main(String[] args) {
    
    
		int num1=3;
		float num2=3.0F;
		System.out.println(num1 == num2);//true
		
	}
}

但是像String,Date等类使用equals()比较时:

package com.qwy;

public class TestDemo {
    
    
	public static void main(String[] args) {
    
    
		String str1=new String("Hello");
		String str2=new String("Hello");
		System.out.println(str1.equals(str2));//true
		
	}
}

运行结果:true

那么肯定String类对Object类的equals()做了重写:

    public boolean equals(Object anObject) {
    
    
        if (this == anObject) {
    
    
            return true;
        }
        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;
    }

看到这里,试想我们将我们自己的类的equals()方法进行重写:

package com.qwy;

class Users{
    
    
	private String name;
	private int age;
	public Users() {
    
    
		// TODO Auto-generated constructor stub
	}
	
	public Users(String name, int age) {
    
    
		super();
		this.name = name;
		this.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;
	}

	//重写equals()方法
	@Override
	public boolean equals(Object obj) {
    
    
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Users other = (Users) 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;
	}
	
}
public class TestObject{
    
    
	public static void main(String[] args) {
    
    
		Users  users1= new Users("张三", 12);
		Users  users2= new Users("张三", 12);
		System.out.println(users1.equals(users2));//true
	}
}

运行结果:true

猜你喜欢

转载自blog.csdn.net/qwy715229258163/article/details/114666773