java中的object类

本文详细解析了Java中的Object类,包括其在类层次结构中的地位、toString()方法的实现及自定义打印方式,以及equals()方法的复写以实现对象比较。此外,文章还探讨了Object类与数组之间的关系,特别是不同数组类型如何转换为Object类型。通过实例代码展示,帮助读者理解和应用Object类的相关特性。

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


• Object类

1、位于java.lang包中。

2、类 Object 是类层次结构的根类,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法。

3、 因为Object是所有类的直接或间接父类,所以,Object中的所有方法,其子类都拥有。

3.1. toString() 当直接打印对象时,默认输出的是该对象的toString方法的返回值。

默认输出的对象的格式为: 类名称@哈希值  如:com.jcxy.demo01.Student@15db9742

为什么会打印出这种形式呢?原因看下面例子

定义一个学生类

package com.jcxy.demo01;

public class Student {

	private int age;
	private String name;
}
定义一个Test类

package com.jcxy.demo01;

public class Test {

	/**测试 toString()的输出结果
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student s = new Student();
		System.out.println(s.toString());//打印s就相当于s.toString()
	}

}
打印结果为:com.jcxy.demo01.Student@15db9742

调用的toString()在父类的源码为

 public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
所以打印出来的结果是类名+@+16进制的哈希值


3.1.2如果想按照自己的格式打印出学生的信息,则需要覆盖父类中的toString()方法。

重新定义学生类



package com.jcxy.demo01;

public class Student {

	private int age;	
	private String name;
	//提供无参数的构造函数。eclipse快捷键:alt + shift + s 出现界面后按 c
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	//提供有参数的构造函数。eclipse快捷键: alt + shift + s 出现界面后按 o
	public Student(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
<span style="white-space:pre">	</span>//重新定以后的父类方法
	public String toString() {
		
		return "age = "+age+"\tname = "+name;
	}
	//封装属性。eclipse快捷键: alt + shift + s 出现界面后按 r
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

Test中测试

package com.jcxy.demo01;

public class Test {

	/**测试 toString()的输出结果
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student s = new Student(21,"Rose");
		System.out.println(s.toString());
	}

}


打印结果:age = 21 name = Rose



3.2 equals() 通过类比toString的复写形式,我们也可以重写自定义类的equals方法。

如比较两个学生是否相等,当年龄和姓名都相同时,我们认为是同一个学生。

学生类:

package com.jcxy.demo01;

public class Student {

	private int age;	
	private String name;
	//提供无参数的构造函数。eclipse快捷键:alt + shift + s 出现界面后按 c
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	//提供有参数的构造函数。eclipse快捷键: alt + shift + s 出现界面后按 o
	public Student(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
	public String toString() {
		
		return "age = "+age+"\tname = "+name;
	}
	//封装属性。eclipse快捷键: alt + shift + s 出现界面后按 r
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	//复写父类Object中的equals方法
	public boolean equals(Object obj) {
		
		//如果两个对象在栈中的地址值相等,则一定是同一个对象。
		if(this == obj)
		{
			return true;
		}
		//判断obj是否是学生类对象
		if(obj instanceof Student)
		{
			//如果是则向下转型,downcaseing  obj转换为student类
			Student s = (Student)obj;
			return (this.age == s.age && this.name == s.name) ? true : false;
			
		}
		return false;
	}
	
}
Test类

package com.jcxy.demo01;

public class Test {

	/**测试 equals()的输出结果
	 * @param args
	 */
	public static void main(String[] args) {
		
		Student s1 = new Student(21,"Rose");
		Student s2 = new Student(21,"Rose");
		Student s3 = new Student(22,"Rose");
		Student s4 = new Student(21,"Jack");
		
		System.out.println(s1.equals(s2));
		System.out.println(s1.equals(s3));
		System.out.println(s1.equals(s4));
	}

}
打印结果:true

                    false

    false



– 注意:关于Object与数组的关系:

1、对于数组元素类型为引用类型的数组来说

– Object obj = strs;//子类转换成父类。将数组整个对象转换成Object对象

– Object[] objs = strs;//将数组中的每个元素转换成对应的Object数组


2、对于数组元素类型为基本数据类型的数组来说

– Object obj2 = arrs;//子类转换成父类对象。将数组整个对象转换成Object对象

– Object[] objs2 = arrs;因为int类型没有父类。

package com.jcxy.demo01;

public class Test {

	/**关于Object与数组的关系
	 * @param args
	 */
	public static void main(String[] args) {
		int[] arrs = {1,2,3,4,5};
		String[] strs = {"aaa","bbb","ccc","ddd"};
		
		//子类转换成父类。将数组整个对象转换成Object对象
		Object obj = strs;
		//将数组中的每个元素转换成对应的Object数组
		Object[] objs = strs;
		
		//子类转换成父类对象。将数组整个对象转换成Object对象
		Object obj2 = arrs;
		
		
		
		//因为int类型没有父类。
		Object[] objs2 = arrs;//报错
	}

}<span style="color:#800000;">
</span>



好啦,我所掌握的Object类(上帝类)就这么多啦,希望能帮到有需要的人,同时也让自己能在以后有空复习一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值