关于equals中if(this==object)的问题

==就是判断两个引用对象的地址是否相等,如果相等那么值一定相等。

笔者在学习的过程中一直对this关键字深痛恶绝,尤其学习到java后期时,知识点底层实现过多时,容易让我想起来人生第一门挂科的c语言的指针,啊呸。下面我的一点一己之见,希望可以帮助到从开始到放弃的java
图一
在这里插入图片描述
通过上面的图一可以看出这是在集合那一块,java本身的equals和hashCode方法远远不足以满足我们的需求。尤其是对象集合的出现让整个学习生涯充满了痛苦。好了话不多说,正题开始:

我们从上面可以看到equlas接收到一个Object o,然后进行判断this==o,意思是当前对象是不是等于传过来的Object类,这个时候我们有两个疑惑,1.这个object是哪个对象 2.这个this对象是哪个this对象。
1.object o对象是你正在进行操作的对象,譬如你进行插入的一个对象数据,Object 是所有数据类型的父类,这样定义,简单明了(哈哈哈,其实并不是)。

2.this 是哪一个对象或者是哪些对象,就拿HashSet集合举例,当我们插入数据的时候,集合本身的特性是不可重复的,集合会自动的判断这个对象是不是和之前的数据相同,如果相同的话就会覆盖。
这个是一个对象,那么传过来的是一个对象地址,这个时候集合就会自动将传入的对象集合进行对比,如果传入的地址相同,即插入的对象是之前就插入过的同一个对象那么这个插入的就毫无意义的相等直接返回而不是继续进行下面可能的判断。这个时候this 就是整个集合对象也是集合中每一个数据对象。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Javaequals和==都是用于比较两个对象是否相等的操作符,但它们的作用有所不同。 ==是一个比较运算符,用于判断两个对象的地址是否相同。如果两个对象的地址相同,则它们一定是同一个对象;如果它们的地址不同,则它们是不同的对象。例如: ``` String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); System.out.println(str1 == str2); // true System.out.println(str1 == str3); // false ``` equals是一个方法,用于比较两个对象的内容是否相同。默认情况下,equals方法比较的是两个对象的地址,即与==的作用相同。但是,可以通过重写equals方法来改变比较的方式。例如: ``` public class Person { private String name; private int age; public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Person)) { return false; } Person other = (Person) obj; return this.name.equals(other.name) && this.age == other.age; } } Person p1 = new Person("Tom", 18); Person p2 = new Person("Tom", 18); Person p3 = new Person("Jerry", 20); System.out.println(p1 == p2); // false System.out.println(p1.equals(p2)); // true System.out.println(p1.equals(p3)); // false ``` 在上面的例子,我们重写了Person类的equals方法,比较的是两个对象的name和age属性是否相同。因此,p1和p2虽然是不同的对象,但它们的内容相同,equals方法返回true。 总之,==比较的是两个对象的地址,而equals比较的是两个对象的内容。如果需要比较两个对象的内容,应该使用equals方法而不是==操作符。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值