java常用类三:Object

本文介绍了Java中Object类的基本概念及其重要方法,包括构造方法、equals()和toString()。equals()方法默认按对象地址比较,而toString()用于打印对象信息。通过重写这两个方法,我们可以实现对象内容的比较和自定义的字符串表示。示例代码展示了如何在Person类中重写这些方法以进行有效的内容比较和输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java常用类三:Object

1.Object类概述
  java.lang.Object类是Java语言中的根类,即所有类的父类。一个类中只要没有明显的继承一个类,则肯定是Object类的子类。其中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类。那么既然继承了Object类,Object类有哪些作用呢?实际上Object类中提供了很多的方法,如下:

方法名称类型描述
public Object()构造构造方法
public boolean equals(Object obj)普通对象比较
public int hashCode()普通取得Hash码
public String toString普通对象打印时调用

2.Object类常用方法
这里介绍两个主要方法:toString()和equals()方法。

方法一:public String toString方法
  在讲解toString()方法之前,先看以下这段代码:

class Demo{  //定义Demo类,实际上就是继承了Object类
}

// 另外创建一个java.class文件:ObjectDemo01
public class ObjectDemo01{
	public static void main(String args[]){
		Demo d = new Demo();  //实例化Demo对象
		System.out.println("不加toString()输出:"+d); //	不加toString()输出:Object.Demo@34a245ab
		System.out.println("加上toString()输出:"+d.toString());//加上toString()输出:Object.Demo@34a245ab	
	}
}

从上面的程序运行结果可以看出,加与不加toString()最终的输出结果是一样的,也就是说对象输出的结果是一样的,也就是说对象输出时一定会调用Object类中的toString()方法打印内容。所以利用此特性就可以通过toString()取得一些对象的信息,如下面代码:

class Person{
	private int age;
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public String toString(){  //此处重写toString方法
		return "姓名:" + this.name + "; 年龄:" + this.age;
	}
}

public class ObjectDemo02{
	public static void main(String args[]){
		Person per = new Person("张三",30);
		System.out.println("对象信息:"+per);
	}
}

程序的Person类中重写了Object类中的toString()方法,这样直接输出对象时调用的是被子类重写过的toString()方法。

方法二:对象的比较操作:public boolean equals(Object obj)
  Object类中的equals()方法实际上也是可以使用的,默认使用的是按地址进行比较,并不能对内容进行比较。

class Person{
	private String name;  //定义name属性
	private int age;  //定义age属性
	//创建构造方法来初始化该对象,给对象的成员变量赋初值
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public boolean equals(Object obj){
		if(this==obj){  //地址相等
			return true;  //肯定是同一个对象
		}
		if(!(obj instanceof Person)){  //不是Person对象
			return false;
		}
		Person per = (Person) obj;  //向下转型:通过父类实例化子类
		if(per.name.equals(this.name)&&per.age==this.age){
			return true;  //依次比较内容
		}else{
			return false;
		}
	}
	public String toString(){
		return "姓名:" + this.name + ":年龄:" + this.age;
	}
}

class OjectDemo03{
	public static void main(String args[]){
		Person per1 = new Person("张三",30);  //实例化Person
		Person per2 = new Person("张三", 30);  //实例化Person
		System.out.println(per1.equals(per2)?"是同一个人!":"不是同一个人!");
		System.out.println(per1.equals("hello")?"是同一个人!":"不是同一个人!");
	}
}

在Person类中重写了equals()方法,首先判断传递进来的对象与当前对象的地址是否相等,如果相等,则肯定是同一个对象,因为在equals()方法处传递参数是Object类型,所以任何对象都可以接收,这样在对象进行向下转型前就必须进行判断,判断传进来的对象是否是Person的实例,如果不是,则直接返回false;如果是,则将各个属性依次进行判断。

写在最后:既然Object类是所有对象的父类,则所有的对象都可以向Object进行转换,在这其中也包含了数组和接口类型(这里就不在演示了),即一切的引用数据类型都可以使用Object进行接收。

如果感觉看的有些生涩,可以把代码运行一下看看,代码都是调试好了的,结合代码会更容易懂的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值