java中 == 、equals()、hashcode()的认识

原文参考:https://www.cnblogs.com/benjieqiang/p/11221751.html、https://blog.csdn.net/bailu666666/article/details/81153815、https://blog.csdn.net/qq_38162448/article/details/81611894

 

java中 == 、equals()、hashcode()的认识_第1张图片

一.先来说说Java的基本数据类型和引用类型

八大基本数据类型:Byte,short,int,long,double,folat,boolean,char,其中占一个字节的是byte,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,这八种数据变量中直接存储值

八大基本数据类型对应着各自的封装类型,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化)

像String类型属于引用类型,变量中存储的是地址,对应的地址存储数据

二.equals和==

equals是判断两个变量或者实例指向同一个内存空间的值是不是相同;

而==是判断两个变量或者实例是不是指向同一个内存空间。

【举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个】

代码例子:

        String str1 = new String("abc");
        String str2 = new String("abc");
        String str3 = str1;
        System.out.println(str1==str2);//false
        System.out.println(str1.equals(str2));//true 
        System.out.println(str1==str3);//true
        System.out.println(str1.equals(str3));//true

三、equals()和hashCode()的比较

 1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。

 2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

        所有对于需要大量并且快速的对比的话如果都用equal()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

 

 

 

你可能感兴趣的:(java基础)