新西兰服务器

Java中使用==和equals的区别是什么


Java中使用==和equals的区别是什么

发布时间:2022-04-08 18:47:06 来源:高防服务器网 阅读:71 作者:iii 栏目:开发技术

这篇“Java中使用==和equals的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中使用==和equals的区别是什么”文章吧。

1、== 解析

== 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较;

  • 如果 == 比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等;

  • 如果 == 是比较的两个对象,那么比较的是两个对象的引用,那么就是比较两个对象的引用是否相等,也就是判断两个对象是否指向了同一块内存区域;

2、equals 方法解析

equals 方法主要用于两个对象之间,检测一个对象是否等于另一个对象。

我们来看一看 Object 类中的 equals 方法的源码

public boolean equals(Object obj) {       return (this == obj);   }

它的作用也是判断两个对象是否相等,一般有两种使用情况:

情况一:对象的 equals 方法没有被重写,那么 equals 被调用时比较的是两个对象的引用是否相等,也就是两个对象是否指向了同一片内存区域。此时,其等价于 == 比较两个对象。

Dog类

package com.xiao;    /**   * @author :小肖   * @date :Created in 2022/3/11 14:42   */  public class Dog {        private String name;        private Integer age;          public Dog() {      }        public String getName() {          return name;      }        public void setName(String name) {          this.name = name;      }        public Integer getAge() {          return age;      }        public void setAge(Integer age) {          this.age = age;      }        public Dog(String name, Integer age) {          this.name = name;          this.age = age;      }  }

测试类

import com.xiao.Dog;    public class Test {        public static void main(String[] args) {          Dog dog = new Dog("小旺",2);          Dog dog1 = new Dog("小旺",2);          System.out.println(dog.equals(dog1));      }  }

测试结果

false

情况二:对象的 equals 方法被重写了。一般,我们进行重写后的 equals 方法比较的是两个对象的内容是否相等。如果相等的话,那么返回 true ,否则返回 false

Dog类

package com.xiao;    /**   * @author :小肖   * @date :Created in 2022/3/11 14:42   */  public class Dog {        private String name;        private Integer age;          public Dog() {      }        public String getName() {          return name;      }        public void setName(String name) {          this.name = name;      }        public Integer getAge() {          return age;      }        public void setAge(Integer age) {          this.age = age;      }        public Dog(String name, Integer age) {          this.name = name;          this.age = age;      }          @Override      public boolean equals(Object obj) {          if(obj.getClass() != getClass()){              return false;          }          Dog dog = (Dog) obj;          if(dog.getAge() == age && dog.getName().equals(name)){              return true;          }          return false;      }  }

测试结果

测试类代码和上面的一样

true

3、equals方法具有以下特性

  • 自反性:对于任意不为 null 的引用值 x ,x.equals(x) 一定是 true。

  • 对称性:对于任意不为 null 的引用值 x 和 y ,当且仅当 x.equals(y) 是 true 时,y.equals(x) 也是 true 。

  • 传递性:对于任意不为 null 的引用值 x 、y 和 z ,如果 x.equals(y) 是 true ,同时 y.equals(z) 是 true,那么x.equals(z) 一定是 true 。

  • 一致性:对于任意不为 null 的引用值 x 和 y ,如果用于 equals 比较的对象信息没有被修改的话,多次调用时x.equals(y) 要么一致地返回 true 要么一致地返回 false 。

  • 对于任意不为 null 的引用值 x,x.equals(null) 返回 false 。

以上就是关于“Java中使用==和equals的区别是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注高防服务器网行业资讯频道。

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[