01-知识点

一.hashCode、equals、== 的区别

1.java官方推荐重写equals方法时也要重写hashCode方法。  
  如果2个对象的equals比较时为true,则hashCode也要相同, 
  如果2个对象的hashCode相同时,equals方法可以不同,  
  因为hashCode底层是hash算法,hash算法的原则就是,如果2个输入相同,则输出一定相同;      
  反之如果输出相同,输入则未必相同,比如md5算法。如果输入不同,输出相同就叫做hash冲突。   
2.Object类中的hashCode、equals、toString 方法  
  hashCode:为native方法,具体实现和JVM厂商有关 
  equals: 用==比较的是内存地址值    
  toString: 打印的是类名和hashCode的16进制值  

3.个人理解:   
  (1):如果一个对象继承自Object类并且没有重写hashCode、equals、toString方法,   
  hashCode的返回值就是该对象的内存地址值,注意Object中的hashCode方法为native方法。具体实现和JVM厂商有关。   
  (2):hashCode是对象的hashCode方法,equals方法是对象的equals方法,== 比较的是对象的内存地址值。   

4.hashMap的存取原理:
   (1):hashMap要求key值不能相同,一般意义上比较相同应该是要比较equals方法,但是如果hashMap在    
    put元素的时候每个已经放入的key都和新key比较equals方法的话,当hashMap中键值对比较多情况下,
    效率非常低。既然是hashMap,底层实现其实是散列表,用的算法就是hash。当往hashMap中put值时:   
    首先计算key的hashCode方法的返回值,在散列表中查找有没有,没有,则为新元素,因为hashCode不同, 
    则equals一定不同,直接添加新元素;如果相同,再比较2个对应key的元素的equals方法,   
    如果相同,则为相同元素,替换value值,如果equals不同,则key不同,当新元素添加。     
    由上可知,hashMap中的所有key的equals方法一定不同,hashCode方法可能相同     

5.java中equals方法的几个特性    

自反性:对任意引用值X,x.equals(x)的返回值一定为true. 
对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true; 
传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true 
一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变 
非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 

二.java 中基本类型的比较为值比较

三.java 中字符串的比较

四.java中int、Integer的比较

五.java 字符串拼接效率StringBuilder>StringBuffer>String

六.HashMap、HashTable、ConcurrentHashMap的区别与联系

七.return 和 finally的执行先后问题

finally会在return执行之后,方法返回之前执行

代码示例

Last updated