==和equals
Posted wq-9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了==和equals相关的知识,希望对你有一定的参考价值。
==:代表比较双方是否相同。如果是基本数据类型则表示值相等,如果是引入类型则表示地址相等即是同一个对象。
equals:Object类中定义有public boolean equals(Object obj)方法,提供定义"对象内容相等"的逻辑。
在编写代码的时候我们经常会使用 equals
和 ==
来判断两个对象是否相等,那么两者有什么区别呢,主要有以下几点区别:
- 首先的区别是,equals 是方法,而 == 是操作符;
- 对于基本类型的变量来说(如
short
、 int
、 long
、 float
、 double
),只能使用 == ,因为这些基本类型的变量没有 equals 方法。对于基本类型变量的比较,使用 == 比较, 一般比较的是它们的值。
- 对于引用类型的变量来说(例如 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流
代码优化