你了解Java中的Object类吗

 更新时间:2021年09月16日 15:35:44   作者:~程序媛~  
Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。可以使用类型为Object的变量指向任意类型的对象,跟着小编来具体了解吧

任何一个类默认继承Object类,就算没有直接继承,最终也会间接继承。

Object类,有两种方式找到:

  1. 第一种:在源码当中找到
  2. 第二种:查阅java类库的帮助文档

Object类中两个重要的方法:

  1. boolean equals (Object obj) //判断两个对象是否相等
  2. String toString () //将对象转换成字符串形式

equals方法:

源代码:

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

作用:通过调用这个方法可以判断两个对象是否相等

class MyTime {
	int year;
	int month;
	int day;
 
	public MyTime() {
		super();
	}
 
	public MyTime(int year, int month, int day) {
		super();
		this.year = year;
		this.month = month;
		this.day = day;
	}
}
public class Test02 {
	public static void main(String args[]) {
		// 判断两个基本数据类型的数据是否相等,,直接使用”==“就行
		int a = 100;
		int b = 100;
		// 这个等号判断的是a中保存的100和b中保存的100是否相等
		System.out.println(a == b);// true(相等) false(不相等) 结果为true
 
		MyTime t1 = new MyTime(2021, 9, 15);
		MyTime t2 = new MyTime(2021, 9, 15);
		// 这个等号判断的是t1保存的对象的内存地址和t2保存的对象的内存地址是否相等
		System.out.println(t1 == t2);// 结果为false
	}
}
        // 重写Object的equals方法之前(比较的是内存地址)
		boolean s = t1.equals(t2);
		System.out.println(s);// 结果为false

判断两个对象是否相等不能用“==”,因为”==“判断的是两个对象的内存地址,然而在Object类中的equals方法当中,默认采用的是”==“判断两个java对象是否相等。而”==“判断的是两个java对象的内存地址是否相等,我们应该判断的是两个java对象的内容是否相等,equals方法无法满足,需要子类重写equals。

public boolean equals(Object obj) {
		// 当年月日都分别相等时,表示两个日期相同
		// 获取第一个日期的年月日
		int year1 = this.year;
		int month1 = this.month;
		int day1 = this.day;
		// 获取第二个日期的年月日
		if (obj instanceof MyTime) {
			MyTime t = (MyTime) obj;
			int year2 = t.year;
			int month2 = t.month;
			int day2 = t.day;
			if (year1 == year2 && month1 == month2 && day1 == day2) {
				return true;
			}
		}
		return false;
	}
// 重写Object的equals方法之后(比较的是内容)
		boolean t = t1.equals(t2);
		System.out.println(s);// 结果为true

toString方法:

源代码:

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

源代码上toString方法的默认实现:类名@对象的内存地址转换为十六进制的形式。

作用:通过调用这个方法可以将一个“Java对象”转换成“字符串形式的表示形式“。(建议所有子类都重写此方法)

class MyTime {
	int year;
	int month;
	int day;
 
	public MyTime() {
		super();
	}
 
	public MyTime(int year, int month, int day) {
		super();
		this.year = year;
		this.month = month;
		this.day = day;
	}
 
	@Override
	public String toString() {
		return "MyTime [year=" + year + ", month=" + month + ", day=" + day + "]";
	}
 
}
public class Test01 {
	public static void main(String args[]) {
		MyTime t1 = new MyTime(2021, 9, 15);
		String s1 = t1.toString();
		// MyTime类重写toString方法之前
		System.out.println(s1);// com.MyTime@15db9742
		// MyTime类重写toString方法之后
		System.out.println(s1);// MyTime [year=2021, month=9, day=15]
 
	}
}

注:输出引用时,会自动调用toString方法,即s1等同于s1.toString()。

到此这篇关于你了解Java中的Object类吗 的文章就介绍到这了,更多相关Java Object类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot+hutool批量生成二维码压缩导出功能

    springboot+hutool批量生成二维码压缩导出功能

    这篇文章主要介绍了springboot+hutool批量生成二维码压缩导出功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • RocketMQ源码解析broker 启动流程

    RocketMQ源码解析broker 启动流程

    这篇文章主要为大家介绍了RocketMQ源码解析broker启动流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • java通过复选框控件数组实现添加多个复选框控件示例分享

    java通过复选框控件数组实现添加多个复选框控件示例分享

    编写程序,通过复选框控件数组事先选择用户爱好信息的复选框,在该程序中,要求界面中的复选框数量可以根据指定复选框名称的字符串数组的长度来自动调节
    2014-02-02
  • mybatis和mybatisplus批量插入问题示例详解

    mybatis和mybatisplus批量插入问题示例详解

    最近在处理一个功能的时候,需要批量插入数据,这篇文章主要给大家介绍了关于mybatis和mybatisplus批量插入问题的相关资料,文中通过实例代码介绍非常详细,需要的朋友可以参考下
    2023-04-04
  • mybatis-plus中更新null值的问题解决

    mybatis-plus中更新null值的问题解决

    本文主要介绍 mybatis-plus 中常使用的 update 相关方法的区别,以及更新 null 的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • Java19新特性中结构化并发的使用

    Java19新特性中结构化并发的使用

    Java19在并发编程领域引入了一个全新的概念:结构化并发,这一特性旨在简化并发任务的管理,提升多线程程序的可维护性和安全性,使其生命周期和控制流更加有序和明确,感兴趣的可以了解一下
    2024-09-09
  • SpringCloud微服务多应用脚手架的搭建与部署方式

    SpringCloud微服务多应用脚手架的搭建与部署方式

    这篇文章主要介绍了SpringCloud微服务多应用脚手架的搭建与部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 关于protected修饰符详解-源于Cloneable接口

    关于protected修饰符详解-源于Cloneable接口

    这篇文章主要介绍了protected修饰符详解-源于Cloneable接口,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot+SpringSecurity+jwt实现验证

    SpringBoot+SpringSecurity+jwt实现验证

    本文主要介绍了SpringBoot+SpringSecurity+jwt实现验证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Spring Boot application.yml配置文件示例详解

    Spring Boot application.yml配置文件示例详解

    本文详细介绍了SpringBootapplication.yml配置文件的使用和配置项,通过学习本文,您应该已经掌握了如何使用application.yml文件来配置SpringBoot应用程序的不同组件,如数据源、数据库、缓存、邮件服务等,感兴趣的朋友一起看看吧
    2025-02-02

最新评论