java中“==”,“equals”,hashcode之间关系
?代码如下:
?
?
?
?
结果如下:
?
truefalsetruefalsefalsetrues.hashCode is: 92599395s1.hashCode is: 92599395s2.hashCode is:92599395truetrue?1.基本类型“==”比较的是值,a,b值相等,所以进宪“==”操作时强果为true.
?
??2.s是new出来,不管内存之间有没有“abcde”,JVM都会new个新的“abcde”;
???? s1是在编译时期就具有的 字符串常量,“abcde”是存在于栈区的,这不同于new关键字new出来的都是放在堆? 区?的。
所以“==”操作比较的是二个不同的对象,结果为false;
s.equals(s1)在String类型中比较的是值,s,s1的值都为“abcde”,所以结果为ture.
?
?3.明显 s3是s1的一个拷贝,“==” 与“equals”都为ture.
?
?4.s,s1,s2 它们的hashcode完全是一样, 实际是可以是指内容一样。
???? 对象相等,hashcode一定相等
???? 反之则不是: hashcode相等,对象不一定相等。
?
?
?总结一下:
??? ==或!=? 在比较基本类型时,比较的是值。 在比较【对象】时,比较的是对象的引用。如果想比较对象的值,就要用equals方法了。
?