J学习日志12(1)-object类



一.object类

1.Object类是所有类的终极父类。 任何一个类都继承了Object类
2.Object类常用的方法:

toString()返回该对象的字符串表示。 返回一个字符串用于描述该对象的
equals()用于比较两个对象的内存地址,判断两个对象是否为同一个对象
hashCode() 返回该对象的哈希码值(大家可以把哈希码就 理解成是对象的内存地址)

二.toString()

1.返回对象的字符串表示。返回一个字符串用于描述该对象的。原toString()代码返回格式:java.lang.Object@5e91993f
2.toString()重写之后,可以输出符号自己要求的数据格式。

class Person{
	int id;
	String name;	
	public Person(int id,String name) {
		this.id=id;
		this.name=name;	
	}	
	public Person() {		
	}
	
	//目前我需要直接输出一个对象的时候,输出的格式是:编号:xxx,姓名:xxx.
	//toString方法无法满足子类的蹴球,那么这时候我们应该对Object类的toString进行重写。	
	@Override
	public String toString() {
		return "编号:"+this.id+"姓名:"+this.name;		
	}
}

public class Demo1 {
	public static void main(String[] args) {
		Object o=new Object();
		System.out.println(o.toString());//java.lang.Object@5e91993f
		System.out.println(o);//java.lang.Object@5e91993f		
		//疑问:为什么直接输出一个对象的时候和输出对象的toString方法返回的结果是一致的?
			//通过查看源代码,直接输出一个对象的时候,实际上在println方法内部会调用这个toString方法,把toString返回的内容输出。
		
		Person p=new Person(11,"viiv");
		System.out.println(p);		
	}
}
java.lang.Object@5e91993f
java.lang.Object@5e91993f
编号:11姓名:viiv

三.equals()

1.默认比较2个对象的内存地址,需要比较其他可以重写

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) {//Object obj=new Person(),这里比较的是id
		//因为obj没有id属性,必须要强转成Person,
		Person p=(Person)obj;//大数据类型->小数据类型 强制类型转换 小数据类型 变量名 = (小数据类型)大数据类型;
		return this.id==p.id;
	}
}

public class Demo1 {
	public static void main(String[] args) {
		Person p1=new Person(110,"狗娃");
		Person p2=new Person(110,"娃");
		//需求:只要2个人的身份证一致,那么就是同一个人。	
		System.out.println("p1与p2是同一个对象吗?"+p1.equals(p2));			
	}
}

四.hashCode()

1.int类型,返回该对象的哈希码值(可以理解成对象的内存地址,相同对象内存地址是相同的)
java中的规范:一般重写了一个类的equals方法,都会重写它的hashCode方法。

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

	@Override
	public boolean equals(Object obj) {//Object obj=new Person(),这里比较的是id
		Person p=(Person)obj;
		return this.id==p.id;
	}
	
	@Override
	public int hashCode() {
		return this.id;		
	}
}

public class Demo1 {
	public static void main(String[] args) {
		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());
		//需求:只要2个人的身份证一致,那么就是同一个人。				
	}
}
p1与p2是同一个对象吗?true
p1的哈希码值是:110
p2的哈希码值是:110
*不重写hashCode,p1p2返回值不一样。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值