JavaSE语法之十二:Object类

2023-12-30 12:31:28

一、概念

Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的,默认会继承Object父类,即所有的类的对象都可以使用Object的引用进行接收

例:使用Object接收所有类的对象。

class Person{}
class Student{}
public class Test {
	public static void main(String[] args) {
		function(new Person());
		function(new Student());
}
	public static void function(Object obj) {
		System.out.println(obj);
	}
}

//执行结果:
Person@1b6d3586
Student@4554617c

在开发中,Object类是参数的最高统一类,但是Object类也存在有定义好的一些方法:
在这里插入图片描述

本小节中,我们主要来熟悉这几个方法:toString()方法、equals()方法、hashcoode()方法。

二、获取对象信息

如果要打印对象中的内容,可以直接重写Object类中的toString()方法,之前我们很详细的整理过了,此处不再累赘。

// Object类中的toString()方法实现:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

三、对象比较equals方法

在Java中,==进行比较时:

  1. 如果 == 左右两侧是基本类型变量,比较的是变量中值是否相同;
  2. 如果 == 左右两侧是引用类型变量,比较的是引用变量地址值是否相同;
  3. 如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址比较的。
// Object类中的equals方法
public boolean equals(Object obj) {
	return (this == obj); // 使用引用中的地址直接来进行比较
}
class Person{
	private String name ;
	private int age ;
	public Person(String name, int age) {
	this.age = age ;
	this.name = name ;
	}	
}

public class Test {
	public static void main(String[] args) {
		Person p1 = new Person("张三", 21) ;
		Person p2 = new Person("李四", 20) ;
		int a = 10;
		int b = 10;
		System.out.println(a == b); // 输出true
		System.out.println(p1 == p2); // 输出false
		System.out.println(p1.equals(p2)); // 输出false
}
}

Person类重写equals方法后,然后比较:

class Person{
...
	@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false ;
	}
	//指的是同一个对象
		if(this == obj) {
			return true ;
	}
		// 不是Person类对象
		if (!(obj instanceof Person)) {
			return false ;
	}
	
		Person person = (Person) obj ; // 向下转型,比较属性值
		return this.name.equals(person.name) && this.age==person.age ;
}
}

结论:比较对象中内容是否相同的时候,一定要重写equals方法,equals方法可以用编译器生成。

四、hashcode方法

  1. hashcode方法用来确定对象在内存中存储的位置是否相同;
  2. 事实上hashCode() 在散列表中才有用,在其他情况下没用。在散列表中hashCode()的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
class People {
    public String name;
    public int age;
}

public class Test6 {
    public static void main(String[] args) {
        People people1 = new People();
        people1.name = "张三";
        People people2 = new People();
        people2.name = "张三";

        System.out.println(people1.hashCode());
        System.out.println(people2.hashCode());
    }
}

//运行结果
2083562754
1239731077
此时地址值不一样

重写hashCode()方法

class People {
    public String name;
    public int age;

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

public class Test6 {
    public static void main(String[] args) {
        People people1 = new People();
        people1.name = "张三";
        People people2 = new People();
        people2.name = "张三";

        System.out.println(people1.hashCode());
        System.out.println(people2.hashCode());
    }
}

//运行结果
774920
774920

hashCode这个方法,目前我们用不到,在数据结构HashMap,会有详解!

文章来源:https://blog.csdn.net/T2283380276/article/details/135277250
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。