在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个访问修饰符:
- 仅对本类可见----private
- 对所有类可见----public
- 对本包和所有子类可见----protected
- 对本包可见----默认,不需要修饰符