关于java的equals和==简要区分

1.==比较双方是否相同,
a.当比较的对象为基础类型时,如果值相等,则返回true,否则为false;
b.当比较的对象为引用类型时,比较的是引用类型的(对象的)地址,如果两个地址相同(即为同一个对象)则返回true,否则为false;

2.equals比较双方是否相同,
a.首先,equals方法在Object基类中已经定义并实现,其比较的是两个对象d的hashcode(指向的地址)是否相同,如果相同则返回ture,否则为false。
b.一般来说,正常的默认继承Object类,则该类的equals功能和Object是一样的,但是由于各种特定意义,Object的equals的比对方式不能够满足比对需求,所以可能需要我们重写equals方法,而java中的String类就重写了Object类的equals方法。
c.String类的equals比对的是,两个字符串内容(value属性)的字符序列是否等,如果相同则返回ture,反之为false。

举一个为什么要重写equals的例子:张三在101班是学生张三,现在,他转到102班之后改名叫张四。作为学生类来说他们是同一个人,我们判断的标准是身份证号【或者是学号(前提学号不变)】。这时候,学生类的equals方法比对时,就不能比对地址了。而是他们的身份证号,这个是唯一不变的。

代码说明:

	public static void main(String[] args) {
		
		Object obj1 = new Object();
		Object obj2 = new Object();
		System.out.println(obj1 == obj2);//false,地址不一样不是同一个对象
		System.out.println(obj1.equals(obj2));//false,Object比较的是两个对象的地址
		
		Person2 person = new Person2("张三",11,1);
		Person2 person2 = new Person2("小张",11,1);
		System.out.println(person == person2);//false,不是同一个对象,但是业务意义上是同一个人,所以需要改写equals
		System.out.println(person.equals(person2));//true,id相同,则认为两个人对象内容相同
		
		String s1 = new String("李四");
		String s2 = new String("李四");
		System.out.println(s1==s2);//false,两个字符串不是同一个对象
		System.out.println(s1.equals(s2));//true,两个字符串内容相同,因为String类改写了Object的equals方法,以内容是否相同为最终标准

	}
	
class Person2{
	int id;
	String name;
	int age;
	
	public Person2() {};
	public Person2(String name,int age,int id) {
		this.age = age;
		this.name = name;
		this.id = id;
	}
	
	public boolean equals(Object obj) {//重写equals方法
		if(obj == null) {
			return false;
		}else{
			if(obj instanceof Person2) {
				Person2 c = (Person2) obj;
				if(c.id == this.id) {
					return true;
				}
			}
		}
		return false;
	}
	public String toString() {
		return name+",age:"+age;
	}

输出结果:
false
false
false
true
false
true

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值