Java对"=="和"equals"的简单理解

在编程众多种条件判断中,相信最常用的就是判相等了,大一学习c语言的我,在刚刚接触java就因为这个问题很头疼。因为有一次我在写java的一段小程序时,用到了字符串的判相等,当时没有反应过来,直接用的“==”,导致程序一直不能正确运行。当发现是判相等出错时,我才想起,c语言是有专门的字符串判断函数的,那在java中该怎么办呢?
首先我们需要了解一点基础知识,java中的数据类型分两种,基本数据类型(int,char,boolean,double…)和引用数据类型(String…)。
***对于基本类型,采用双等号判断,只要数值相等就返回true,而对于引用类型,即常用的String啊还有自己定义的类,只有二者指向同一个对象时才会返回true。***这也就解释了为什么明明两个字符串相等,却返回false的问题。
那你可能会问,equals如何?让你失望的是,equals的内部其实也是个双等号。equals是专门为引用类型设置的,是object类里的一个方法,所有类都继承object,自然所有类都有equals方法,它的目的也是为了判断二者是否指向同一个对象。也就是说,如果你定义了一个类,即使你让equals判断两个属性完全相同的对象,它的返回依旧是false。
听起来equals好像挺没用的,但是这个方法也有特例,*对于File,Date,String还有包装类(wrapper class)来说,equals是比较内容而不比较引用的。*为什么呢?
因为这些类里重写了equals方法!
这或许也给了你启发,我是否也可以通过重写equals方法来改变判相等的方法呢?答案是肯定的。但是要达到这个目的,我们不仅要重写equals,还有重写hashcode。
hashCode的写法其实很多样,你只需要保证相同对象的hashCode相同即可,这才可以保证equals正常运行。
举个栗子,我定义了一个Person类,这个类只有一个姓名属性,我希望只要姓名相等那两个对象就相等,那我就可以这样写:

	public String getname() {
		return name;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!(obj instanceof Person))
			return false;
		Person person = (Person) obj;
		return getname().equals(person.getname());
	}

	@Override
	public int hashCode() {
		return getname().hashCode();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值