Object类

Object类

面向对象的核心思想:“找合适的对象,做适合的事情”。
合适的对象:

  • 自己描述类,自己创建对象。
  • sun已经描述了好多常用的类,可以使用这些类创建对象。
  • API(Application Program Interface)

sun定义的那么多类的终极父类是Object,任何一个类都继承了Object类。
Object描述的是所有类的通用属性与方法。

一、Object类常用方法

1.toString()

toString() 返回对象的描述信息 :

java.lang.Object@de6ced   
类名@哈希码值的十六进制形式。

此描述信息不能直观的展示对象的信息,
父类的指定的功能不能满足要求,那么子类可以复写父类的功能函数。那么该对象再调用toString()方法时,则会调用子类复写的toString方法。

重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的数据格式。

package com.hcx;

class Person {
	
	String name;
	int age;
	public Person() {
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

}

class Demo{
	public static void main(String[] args) {
		Person p = new Person();
		System.out.println(p);//com.hcx.Person@15db9742
	}
}

重写toString方法,按照想要的格式输出person的信息

package com.hcx;

class Person {
	
	String name;
	int age;
	public Person() {
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	@Override
	public String toString() {
		return this.name+"-"+this.age;
	}
}

class Demo{
	public static void main(String[] args) {
		Person p = new Person("hcx",23);
		System.out.println(p);//hcx-23
	}
}

2.equals(Object obj)

用于比较两个对象的内存地址,判断两个对象是否为同一个对象。

重写equals方法:
Object的equals方法默认比较的是两个对象的内存地址,目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合现在的需求。

	@Override
	public boolean equals(Object obj) { 
		Person p  = (Person)obj;
		return this.id== p.id;
	}
3.hashCode()

返回该对象的哈希码值:采用操作系统底层实现的哈希算法。
同一个对象的哈希码值是唯一的。

java中的规范:一般重写了一个类的equals方法,我们都会重写它的hashCode方法。
如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。

class Person{
	
	int id;
	String name;

	public Person(int id, String name) {
		this.id = id;
		this.name = name;
	}

	public Person() {
	}
	
	@Override
	public String toString() {
		return "编号:"+ this.id + " 姓名:"+this.name;
	}
	
	//为什么要重写:Object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合我现在的需求。
	@Override
	public boolean equals(Object obj) { 
		Person p  = (Person)obj;
		return this.id== p.id;
	}
	
	@Override
	public int hashCode() {
		return  this.id;
	}
}

直接输出一个对象的时候和输出对象的toString方法返回的字符串结果是一样的:

直接输出一个对象的时候,实际上在println方法内部会调用这个对象的toString方法,把toString方法返回的内容输出。

public class Demo{

	public static void main(String[] args) {
		
		/*
		Object o = new Object();
		System.out.println(o.toString());  // java.lang.Object@18b3364    返回的字符串表示: 完整类名+@+ 对象的哈希码
		//直接输出一个对象的时候,实际上在println方法内部会调用这个对象的toString方法,把toString方法返回的内容输出。
		System.out.println(o);  // java.lang.Object@18b3364  
		
		Person  p1 = new Person(110,"小红");
		System.out.println("p1:"+p1);  
		//如果我们能够输出一个p对象的时候,输出的格式: 编号:110 姓名: 小红..
		Person  p2 = new Person(112,"小明");
		System.out.println("p2:"+p2);  
		*/
		Person p1 = new Person(110,"小红");
		Person p2 = new Person(110,"小明");
		//需求:在现实生活中只要两个人的身份证一致,那么就是同一个人。
		System.out.println("p1与p2是同一个对象吗?"+ p1.equals(p2));
		
		System.out.println("p1哈希码:"+ p1.hashCode());
		System.out.println("p2哈希码:"+ p2.hashCode());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值