精华内容
下载资源
问答
  • Java比较两个对象中所有属性是否相等
    千次阅读
    2021-03-08 16:30:03

    例以下述Java类:java

    import java.io.Serializable;

    import java.util.List;

    public class Bean_Topology implements Serializable {

    private static final long serialVersionUID = 1L;

    public static long getSerialversionuid() {

    return serialVersionUID;

    }

    private Long topology_pk;

    private String topology_id;

    public String getTopology_id() {

    return topology_id;

    }

    public void setTopology_id(String topology_id) {

    this.topology_id = topology_id;

    }

    public Long getTopology_pk() {

    return topology_pk;

    }

    public void setTopology_pk(Long topology_pk) {

    this.topology_pk = topology_pk;

    }

    @Override

    public String toString() {

    return "当前拓扑的PK为:" + topology_pk + ",ID为:" +

    更多相关内容
  • 用哪个???我们先不要着急选择;先来看看使用它们分别输出的结果;根据结果才好剖析它们;先来看“==”号如下图示:上图示例分解:再看 “equals”方法我们再...如下图示:根据万类之根Object对象的equals我们发现...

    用哪个???

    我们先不要着急选择;

    先来看看使用它们分别输出的结果;

    根据结果才好剖析它们;

    先来看“==”号

    如下图示:

    上图示例分解:

    再看 “equals”方法

    我们再来使用equals看看结果,

    会发现结果会有些许不同,

    如下图示:

    上图示例分解:

    为了更好的便于我们理解,

    我们进入源代码来逐一看一下;

    源码浅析

    首先我们先打开Object对象的equals;

    如下图示:

    根据万类之根Object对象的equals我们发现;

    本质还是“==”来进行对比数值的;

    只是Integer、String等进行方法重写而已。

    我们再来看一下Integer包装类

    (其他基本类型的包装类都类似在此就不一一举例了)

    的 equals;

    如下图示:

    只是将包装类转换成int然后进行值对比;

    而本质依然是使用的“==”

    可能你会有疑问了;

    既然本质都是用的“==”为什么String对象前、后两次输出的值不同呢?

    【“==”的输出的是false,“equals”输出的是true】

    再回答问题之前我们先看看它的源代码;

    String引用类型的equals的;

    如下图示:

    我们看到判定对象如果是String实例的话,

    就会将引用类型String转换成了基本类型char(

    进行循环比对,如果有不相同的值就返回false。

    简言之,就是将引用比较转换成了值比较(

    我们事例使用equals对比的数值是”2”,

    值是相同的,所以返回值是true。

    从这个角度我们也能很好的理解为1、 基本类型对比的是值

    2、 引用类型对比的是内存地址

    这就能解释明明我们的Person实例;

    一个赋值的是“张三”,一个赋值的“李四”;

    结果为什么是相等的呢?

    看了Object对象的equals源码我们才知道,

    因为他们对比的不是值,而是内存地址,

    为了验证,

    我们来看下图:

    上图示例分解:

    我们可以看到输出的内存地址,

    都是相同的;

    那么返回true 也就无可厚非啦;

    我们重新给开辟一个内存空间,并把原本赋值的“李四”改成与上个实例相对的“张三”后;

    会发生什么情况呢?

    如下图示:

    上图示例分解:

    有没有同学已经提前猜度啦呢?

    内容是相同啦,

    但内存是不同的,

    它既然比对的是内存地址,

    返回的结果当然也就由原来的true,变成false啦。

    重写toString() 方法

    有聪明的同学或许会想到了;

    我们上文不是刚说了吗?

    引用类型String的equals方法;

    能将引用比较转换成了值比较

    我们将Person对象转换成String类型不就可以了吗?

    那我们来试试,

    如下图示:

    上图示例分解:

    哎…

    什么情况呢?

    咋不行呢?

    让我们进入到对象的toString()方法里来看下

    什么意思呢?

    调用此方法给我返回的是;

    对象的类名称 并 拼接一个16进制的hashcode码;

    我们给他打印一下看看:

    上图示例分解:

    确实不相同;

    不怪人家给返回false。

    那你可能要说了,

    你可能气愤啦;

    这个不对啊;

    跟咱们上面说的不是相悖了吗?

    别着急…

    这个toString()不行;

    那咱们给就他造一个行的呗;

    怎么造呢;

    如下图示:

    上图示例分解:

    我们在Person的实体对象内,

    使用Override注解重写toString() 方法,

    接着我们再次运行,看下效果

    如下图示:

    上图示例分解:

    我们发现重写后的结果,

    符合我们的预期。

    总结一下

    到现在是不是你不是已经掌握了再使用的时候如何选择呢?

    1、基本变量的比较方式我就用“==”

    2、如果要比较实际内存中的内容,我们就要用“equals”方法

    3、如果是我们自己定义的实例类,

    我们自定义的类都是继承自object

    从上文的源码分析推导出,

    用“equals”或“==”都是一样的

    展开全文
  • Object类中的equals方法用于检测一个对象是否等于另外一个对象。...例如,采用这种方式比较两个PrintStream对象是否相等就完全没有意义。然而,经常需要检测两个对象状态的相等性,如果两个对象的状...

    Object类中的equals方法用于检测一个对象是否等于另外一个对象。在Object类中,这个方法将判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。从这点上看,将其作为默认操作也是合情合理的。然而对于多数类来说,这种判断并没有什么意义。例如,采用这种方式比较两个PrintStream对象是否相等就完全没有意义。然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的。

    例如,如果两个雇员对象的姓名、薪水和雇佣日期都一样,就认为它们是相等的(在实际的雇员数据库中,比较id更有意义,利用下面这个示例演示equals方法的实现机制)。

    public booleanequals(Object otherObject)

    {

    Employee other=(Employee)otherObject;//a quick test to see if the objects are identical

    if (this == otherObject) return true;//must reture false if the explicit parameter is null

    if (otherObject == null) return false;//if the classes don't match, they can't be equal

    if (getClass() !=otherObject.getClass())return false;//test whether the fields have identical values

    returnname.equals(other.name)&& salary==other.salary&&hireDay.equals(other.hireDay);

    }

    getClass方法将返回一个对象所属的类。在检测中,只有在两个对象属于同一个类时,才有可能相等。

    Java语言规范要求equals方法具有下面的特性:

    1)自反性:对于任何非空引用x, x.equals(x)应该返回true。

    2)对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true。

    3)传递性:对于任何引用x, y 和z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也应该返回              true。

    4)一致性:如果x和y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果。

    5)对于任意非空引用x, x.equals(null)应该返回false。

    以下是编写完美的equals方法的建议:

    1、显式参数命名为otherObject,稍后需要将它转换成另一个叫做other的变量。

    2、检测this与otherObject是否引用同一个对象:

    if(this == otherObject) return true;

    这条语句只是一个优化。实际上,这是一种经常采用的形式。因为计算这个等式要比一个一个地比较类中的域所付出的代价要小的             多。

    3、检测otherObject是否为null,如果为null,返回false。这项检测是很必要的。

    if(otherObject == null) return false;

    4、比较this与otherObject是否属于同一个类。如果 equals的语义在每个子类中有所改变,就使用getClass检测:

    if(getClass()!=otherObject.getClass()) return false;

    如果所有的子类都拥有统一的语义,就使用instanceof检测:

    if(!(otherObject instanceof ClassName) ) return false;

    5、将otherObject转换为相应的类类型变量:

    ClassName other = (ClassName)otherObject;

    6、现在开始对所有需要比较的域进行比较了。使用==比较基本类型域,使用equals比较对象域。如果所有的域都匹配,就返回true;否            则返回false。

    return field1 == other.field1 && Object.equals(field2, other,field2)&&...

    如果在子类中重新定义equals,就要在其中包含调用super.equals(other).

    以下以一个员工类和经理类来说明equals方法

    public classEmployee {privateString name;private doublesalary;privateDate hireDay;public Employee(String name, double salary, int year, int month, intday) {this.name =name;this.salary =salary;

    GregorianCalendar calendar= new GregorianCalendar(year,month-1,day);this.hireDay =calendar.getTime();

    }publicString getName() {returnname;

    }public doublegetSalary() {returnsalary;

    }publicDate getHireDay() {returnhireDay;

    }public void raiseSalary(doublebyPercent)

    {double raise = salary * byPercent /100;

    salary+=raise;

    }

    @Overridepublic booleanequals(Object otherObject)

    {

    Employee other=(Employee)otherObject;//a quick test to see if the objects are identical

    if (this == otherObject) return true;//must reture false if the explicit parameter is null

    if (otherObject == null) return false;//if the classes don't match, they can't be equal

    if (getClass() !=otherObject.getClass())return false;//test whether the fields have identical values

    returnObjects.equals(name, other.name)&& salary ==other.salary&&Objects.equals(hireDay, other.hireDay);

    }

    @Overridepublic inthashCode(){returnObjects.hash(name, salary, hireDay);

    }

    @OverridepublicString toString() {return getClass().getName()+"{" + "name='" + name + '\'' + ", salary=" + salary + ", "

    + "hireDay=" + hireDay + '}';

    }

    }

    public class Manager extendsEmployee {private doublebonus;public Manager(String name, double salary, int year, int month, intday) {super(name, salary, year, month, day);this.bonus = 0;

    }public doublegetSalary()

    {double baseSalary = super.getSalary();return baseSalary +bonus;

    }public void setBonus(doublebonus) {this.bonus =bonus;

    }

    @Overridepublic booleanequals(Object o) {if (!super.equals(o)) return false;

    Manager other=(Manager) o;return bonus ==other.bonus;

    }

    @Overridepublic inthashCode() {return super.hashCode() + 17 * newDouble(bonus).hashCode();

    }

    }

    展开全文
  • java判断两个对象是否相等的方法

    千次阅读 2021-02-12 14:10:36
    java判断两个对象是否相等的方法发布时间:2020-06-25 13:48:38来源:亿速云阅读:197作者:...java中可以使用equals()方法判断两个对象是否相等,equals() 方法用于将字符串与指定的对象比较。如果给定对象与字符...

    java判断两个对象是否相等的方法

    发布时间:2020-06-25 13:48:38

    来源:亿速云

    阅读:197

    作者:Leah

    这期内容当中小编将会给大家带来有关java判断两个对象是否相等的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    java中可以使用equals()方法判断两个对象是否相等,equals() 方法用于将字符串与指定的对象比较。如果给定对象与字符串相等,则返回 true;否则返回 false。

    该方法的源码如下:public boolean equals(Object obj) {

    return (this == obj);

    }

    所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的的内存地址,所以说使用Object的equals()方法是比较两个对象的内存地址是否相等,即若object1.equals(object2)为true,则表示equals1和equals2实际上是引用同一个对象。

    虽然有时候Object的equals()方法可以满足我们一些基本的要求,但是我们必须要清楚我们很大部分时间都是进行两个对象的比较,这个时候Object的equals()方法就不可以了,实际上JDK中,String、Math等封装类都对equals()方法进行了重写。

    下面是String的equals()方法:public boolean equals(Object anObject) {

    if (this == anObject) {

    return true;

    }

    if (anObject instanceof String) {

    String anotherString = (String)anObject;

    int n = count;

    if (n == anotherString.count) {

    char v1[] = value;

    char v2[] = anotherString.value;

    int i = offset;

    int j = anotherString.offset;

    while (n-- != 0) {

    if (v1[i++] != v2[j++])

    return false;

    }

    return true;

    }

    }

    return false;

    }

    对于这个代码段:if (v1[i++] != v2[j++])return false;我们可以非常清晰的看到String的equals()方法是进行内容比较,而不是引用比较。至于其他的封装类都差不多。

    在Java规范中,它对equals()方法的使用必须要遵循如下几个规则:

    equals 方法在非空对象引用上实现相等关系:

    1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。

    2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。

    3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。

    4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。

    5、 对于任何非空引用值 x,x.equals(null) 都应返回 false。

    对于上面几个规则,我们在使用的过程中最好遵守,否则会出现意想不到的错误。

    在java中进行比较,我们需要根据比较的类型来选择合适的比较方式:

    1) 对象域,使用equals方法 。

    2) 类型安全的枚举,使用equals或== 。

    3) 可能为null的对象域 : 使用 == 和 equals 。

    4) 数组域 : 使用 Arrays.equals 。

    5) 除float和double外的原始数据类型 : 使用 == 。

    6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。

    7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。

    上述就是小编为大家分享的java判断两个对象是否相等的方法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

    展开全文
  • Java 判断两个变量是否相等

    千次阅读 2021-03-04 08:59:53
    判断两个变量是否相等的方式有两种:利用运算符 ==利用equals方法(1)比较基本Java基本数据类型比较基本数据类型,只能用“==”,不能用equals,这里比较的是两个变量的;(2)比较包装类比较包装类,举个例子...
  • Java 判断两个对象是否相等

    千次阅读 2021-11-07 15:35:32
    一、使用 == 与 equals ...则通过equals()比较该类的两个对象时,等价于通过“==”比较两个对象。 情况2:类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返..
  • java如何判断两个Object类型是否相同?

    千次阅读 2020-11-27 11:27:33
    第一时间我们都会想到instanceof 但是instanceof是必须要已知一类型,例如 People p = new People; p instanceof People; 这时我们可以通过反射来判断: public static Object exchangeEntityInfo(Object object1,...
  • Java比较两个对象的属性是否相等 import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.sql.Timestamp; import java.util.*; /** * 比较两个...
  • 在面向对象语言中,经常会比较两个对象是否相等,而比较的大多是实体类实例,也就是封装数据的那些类实例,或者是Map、List互相嵌套成的复杂数据结构。比较对象是否相等,常见的思路是重写equals方法,但鉴于对象的...
  • Java比较两个对象中全部属性是否相等

    万次阅读 多人点赞 2018-12-14 16:01:49
    Java比较两个对象中全部属性是否相等 例如下述Java类: import java.io.Serializable; import java.util.List; public class Bean_Topology implements Serializable { private static final long ...
  • 当使用 == 来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就返回true。但是对于两个引用类型变量,只有它们指向同一个对象时, == ...
  • 展开全部java比较两个字符32313133353236313431303231363533e4b893e5b19e31333366306435串是否相等可以用equals方法或者是“==”。equals 方法常常用来比较两个对象的内容是否相等,如果只是比较对象的内容,而不...
  • Java 中判断两个对象是否相等

    千次阅读 2020-04-28 18:21:08
    嗯先铺垫一下Java中的相等问题,比较方法有equals和==,比较的方向有内容相等和对象相等。 1.equals:只能比较对象,比较对象地址是否相等;可以重写equals方法,比如String重写equals方法改为内容是否相等。 2.==:...
  • Java中如何判断两个对象是否相等

    千次阅读 2019-08-17 17:53:45
    如何判断两个对象相等,这个问题实际上可以看做是如何对equals方法和hashcode方法的理解。 从以下几个点来理解equals和hashCode方法: 1、equals的作用及与==的区别。 2、hashcode的作用及与equals的关系。 1、...
  • 最新项目中要加操作日志,同时要把用户修改了那些字段记录下来,在更新的时候就需要比较之前的数据和现在的数据有哪些不同,这么多类一比较就太麻烦了,所以打算写一工具类。 主要思想还是通过反射获取类...
  • Java如何比较两个对象

    千次阅读 2021-02-26 09:41:00
    Java如何比较两个对象1 Java如何比较两个对象的介绍Java Object类是所有Java类的超类。默认情况下,所有Java类都实现Object类。Java Object类提供了两个重要的方法来比较Java中的两个对象,即equals() 和hashCode() ...
  • java比较两个对象

    千次阅读 2021-03-01 06:30:22
    JAVA比较两个对象,其实就是判断两个对象的引用变量是否相等1. ==运算符就是比较引用变量所指向的内存地址是否相同2. equals(Object o)方法,也是按内存地址比较,但用户可以覆盖Object类的equals方法Useru1=new...
  • Java判断两个List是否相同

    千次阅读 2021-02-12 16:57:25
    简书新手,第一次写博客,一是为了巩固一下,加深印象,二是留作一底稿,方便以后查看。还有呢,就是希望在这里能得到大神得指点,以免误人子弟。如有不足,敬请谅解,欢迎指正,谢谢!一、背景昨天写项目时遇到一...
  • java比较两个map是否相同

    千次阅读 2022-04-03 20:47:11
    AbstractMap重写了equals方法,保证对两个相同内容的map调用equals比较结果为真,源码如下 public boolean equals(Object o) { //同一对象相等 if (o == this) return true; //不是Map的子类不相等 if (!(o instanceof...
  • java如何比较map中的是否相等

    千次阅读 2021-03-06 13:31:21
    例如下述Java类:import java.io.Serializable;import java.util.List;public class Bean_Topology implements Serializable {private static final long serialVersionUID = 1L;public static long ...
  • java怎么比较两个list是否相同?

    千次阅读 2021-02-27 15:29:34
    展开全部首先这里需要确定一下集合相等32313133353236313431303231363533e78988e69d8331333363396464的定义,我们应该是认为两个集合的元素完全一致则相等。那么判断可以这样做:一判断两个list集合的元素个数是否...
  • 比较两个list中存储的map数据,比较的list的数据类型需一致,就能比较出存储的数据是否一致。 二、实现步骤 1、比较两个list的长度大小 2、统计出每个list中存储的map的个数及重复的,进行比较 3、具体比较值 ...
  • java 怎么比较两个list是否相同

    千次阅读 2021-02-12 16:57:26
    判断两个list集合的元素个数是否相等。如果不相等两个list集合也不相等,判断结束,如果相等则进入第二步判断判断list1的元素是否全部在list2中。遍历list1,取出list1中的元素,依次去list2中比较是否list2也存在...
  • 当我们对类与对象有一定的了解后,不难发现,要想对两个对象的内存地址进行比较,使用“==”运处符就可以实现。2.首先,我们创建一个类。3.使用if控制语句判断两个对象的内存地址是否相等。4.下面是完整代码,.....
  • * 比较两个实体属性,返回一个map以有差异的属性名为key,value为一个Map分别存oldObject,newObject此属性名的 * @param oldObject 进行属性比较的对象1 * @param newObject 进行属性比较的对象2 * @...
  • java 判断两个字符串相等

    万次阅读 2019-02-28 02:06:04
    其他语言比较两个字符串是否相同通常用“==”,但在java中要用equals()。 1、“==” “==”比较的是是否为同一个对象,两个不同的字符串对象,即使是相同的,用“==”还是返回false。 举个例子: String a = &...
  • 在jdk7以后,java引入了比较两个对象的新的方法,Objects.equals(Object a, Object b) ,非常方便,直接调用即可,避免空指针异常。 import java.util.Objects; /** * @author xasnow * @Date 2020/1/1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,478
精华内容 62,191
关键字:

java比较两个object值相等

java 订阅