java中如何比较两个对象

在java中我们比较俩个对象是否为同一个对象的时候,使用 “==”,比如当我们比较两个object对象的时候,这个时候就可以用“==”,此时调用equals方法,它的内部实现也是“==”。

但当我们需要比较对象里面的基本类型的值的时候,我们需要用equals方法。

《java核心技术  卷1  基础知识》这本书里面有介绍equals的特性 

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

  • 自反性:对于非空引用X,x.equals(x)应该返回true.
  • 对称性:对于任何引用x,y当前仅当y.equals(x)返回true,x.equals(y)也应该返回true.
  • 传递性:对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也应该返回true.
  •  一致性:如果x和y引用的对象没有发生变化,反复调用e.equals(y)应该返回同样的结果。
  • 对于任意非空引用x,x.equals(null)应该返回false

接下来我们用 Integer这个对象来测试一下:

 public static void main(String[] args) {
         Integer num1 =new Integer(1);
        Integer num2 =new Integer(1);
        int num3=1;
        int num4=1;
        System.out.println(num1==num4);
        System.out.println(num1.equals("1"));  //这样是false   //比较的时候首先看equals里面的对象是不是同一个对象
        System.out.println(num3==num4);
        System.out.println(num1.equals(num2));
        System.out.println(num1==num2);
    }

在控制台中打印的结果:

按 ctrl + alt + b   我们可以看到这个equal的内部实现原理

通过源码我们可以看到  equals方法是比较的元素的基础值,只要值相同了,那返回的就是true。

Java对象的继承关系:

java中控制可见性的4个访问修饰符:

  1. 仅对本类可见----private 
  2. 对所有类可见----public
  3. 对本包和所有子类可见----protected
  4. 对本包可见----默认,不需要修饰符

猜你喜欢

转载自blog.csdn.net/qq_35716892/article/details/84337657