美文网首页
2019-07-11 equals和==的区别

2019-07-11 equals和==的区别

作者: 北子萌 | 来源:发表于2019-07-11 10:59 被阅读0次

equals的五个特性:

 1   自反性:对任意引用值X,x.equals(x)的返回值一定为true;

  2   对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;

  3   传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true ;

  4   一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变;

  5   非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 。

equals方法最初是在所有类的基类Object中进行定义的,源码是

public boolean equals(Object obj) {

    return (this == obj);

    }

  由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,但是没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非我们在此类中重写equals。

如果重写了equals方法,那就根据重写的规则来,例如下面的这段代码

equals 重写代码展示

若A==B 即是同一个String对象 返回true2.若对比对象是String类型则继续,否则返回false3.判断A、B长度是否一样,不一样的话返回false4。逐个字符比较,若有不相等字符,返回false

equals方法与hashcode的辨析

1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。 

2、如果两个对象不equals,他们的hashcode有可能相等。 

3、如果两个对象hashcode相等,他们不一定equals。 

4、如果两个对象hashcode不相等,他们一定不equals。 

==的比较:

比较的是两个对象的地址是不是相同的,JAVA的Integer会缓存-128到127之间的对象

如:Integer x = 100,会调用Integer的valueOf()方法,这个方法就是返回一个Integer对象,但是在返回前,作了一个判断,判断要赋给对象的值是否在[-128,127]区间中,且IntegerCache(是Integer类的内部类,里面有一个Integer对象数组,用于存放已经存在的且范围在[-128,127]中的对象)中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新对象返回

Integer i02 = 59;

Integer i03 = Integer.valueOf(59);

Integer i04 = new Integer(59);

System.out.println(i02 == i03); //true 因为59位于缓存区间直接从缓存中获取

System.out.println(i02 == i04); //false

System.out.println(i03 == i04); //false

还有一个例子

Integer i02 = 200;

Integer i03 = Integer.valueOf(200);

Integer i04 = new Integer(200);

System.out.println(i02 == i03); //false 因为200超出缓存区间从新创建对象

System.out.println(i02 == i04); //false

System.out.println(i03 == i04); //false

相关文章

  • 2019-07-11 equals和==的区别

    equals的五个特性: 1 自反性:对任意引用值X,x.equals(x)的返回值一定为true; 2对称性:对...

  • Java 比较相等

    Java Equals() 特性 Equals() 和 == 的区别 重写Equals方法 重写HashCode方法

  • java 中 String == 原理 equals 和

    == 和equals的区别

  • 【面试1】

    基础 1、equals和==(equals和==的区别)equals:是Object的一个方法,实现对象的比较;复...

  • HashCode和Equals的区别

    HashCode和equals的区别: String方法的equals方法和HashCode方法 String的H...

  • ==和equals

    ==和equals的区别: ==和equals方法都是用来比较两个变量/对象是否相等。 如果没有重写equals方...

  • == 和 equals() 区别

    解释 代码 重写equals方法

  • ==和equals区别

    基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boo...

  • ==和Equals区别

    ==和Equals区别 对于基本数据类型:(byte、short、char、int、float、double、lo...

  • ==和Equals区别

    对于基本数据类型:(byte、short、char、int、float、double、long、boolean),...

网友评论

      本文标题:2019-07-11 equals和==的区别

      本文链接:https://www.haomeiwen.com/subject/illrkctx.html