And*_*son 50
identity:变量与另一个变量保存 相同的实例.
相等:两个不同的对象可以互换使用.他们经常拥有相同的身份.
例如:
Integer a = new Integer(1);
Integer b = a;
Run Code Online (Sandbox Code Playgroud)
a是完全相同的b.
在Java中,身份用于测试==.例如,if( a == b ).
Integer c = new Integer(1);
Integer d = new Integer(1);
Run Code Online (Sandbox Code Playgroud)
c是平等但不相同d.
当然,两个相同的变量总是相等的.
在Java中,等式由equals方法定义.请记住,如果实现equals,则还必须实现hashCode.
小智 15
Identity确定两个对象是否共享相同的内存地址.Equality确定两个对象是否包含相同的状态.
如果两个对象相同,那么它们也是相等的,但仅仅因为两个对象相等,并不意味着它们共享相同的内存地址.
对于字符串有一个特例,但这不是主题,你需要向别人询问它是如何工作的;-)
标识意味着它是相同的对象实例,而相等意味着您比较的对象是对象的不同实例,但碰巧包含相同的数据.
插图(在java中)
Date a = new Date(123);
Date b = new Date(123);
System.out.println(a==b); //false
System.out.println(a.equals(b)); //true
Run Code Online (Sandbox Code Playgroud)
所以a和b是不同的实例(内存中的不同分配),但在"数据"级别上它们是相等的.