==和equals

Posted wq-9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了==和equals相关的知识,希望对你有一定的参考价值。

==:代表比较双方是否相同。如果是基本数据类型则表示值相等,如果是引入类型则表示地址相等即是同一个对象。

equals:Object类中定义有public boolean equals(Object  obj)方法,提供定义"对象内容相等"的逻辑。

在编写代码的时候我们经常会使用 equals== 来判断两个对象是否相等,那么两者有什么区别呢,主要有以下几点区别:

  1. 首先的区别是,equals 是方法,而 == 是操作符;
  2. 对于基本类型的变量来说(如 shortintlongfloatdouble),只能使用 == ,因为这些基本类型的变量没有 equals 方法。对于基本类型变量的比较,使用 == 比较, 一般比较的是它们的值
  3. 对于引用类型的变量来说(例如 String 类)才有 equals 方法,因为 String 继承了 Object 类, equals 是 Object 类的通用方法。对于该类型对象的比较,默认情况下,也就是没有复写 Object 类的 equals 方法,使用 == 和 equals 比较是一样效果的,都是比较的是它们在内存中的存放地址。但是对于某些类来说,为了满足自身业务需求,可能存在 equals 方法被复写的情况,这时使用 equals 方法比较需要看具体的情况,例如 String 类,使用 equals 方法会比较它们的值
 1 public class TestEquals {
 2     public static void main(String[] args) {
 3         Object obj;
 4          String str;
 5          User u1=new User(1000,"高旗","123456");
 6          User u2=new User(1000,"高希希","123456");
 7          System.out.println(u1==u2);
 8          System.out.println(u1.equals(u2));
 9          String str1=new String("sxt");
10          String str2=new String("sxt");
11          System.out.println(str1==str2);
12          System.out.println(str1.equals(str2));
13     }
14  
15  
16 }
17 
18 class User{
19     int id;
20     String name;
21     String pwd;
22     public User(int id, String name, String pwd) {
23         super();
24         this.id = id;
25         this.name = name;
26         this.pwd = pwd;
27     }
28     
29     public boolean equals(Object obj) {
30         if (this == obj)
31             return true;
32         if (obj == null)
33             return false;
34         if (getClass() != obj.getClass())
35             return false;
36         User other = (User) obj;
37         if (id != other.id)
38             return false;
39         return true;
40     }
41     
42 }

 

 

技术分享图片

 

以上是关于==和equals的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中并行化以下代码片段?

Python代码阅读(第13篇):检测列表中的元素是否都一样

Java习惯用法总结

代码安全 | 第十七期:对象只定义了Equals和Hashcode方法之一的漏洞

Java8 Stream流

代码优化