Java基础知识
equal与==、hashCode的区别和使用场景
- ==:用于比较变量所对应的内存中所存储的数值是否相同,可用来比较两个基本类型的数据或两个引用变量
- equal:用于比较两个独立对象的内容是否相同
- hashCode:重写
equals()一般会比较的全面一点,效率也会比较低,而利用hashCode()进行比较,只要生成一个hash值就可以进行比较,效率很高。但是hashCode并不是完全可靠的,有时候会产生hash冲突,如果需要大量并且快速的对比一般可以先对比hashCode,如果不相等,那么两个对象肯定不相等,如果相等再用equals()去对比,两者都相同了,对象才相同。
String为什么要设计成不可变的
- 字符串常量池的需要,如果允许改变,会导致各种逻辑错误,改变一个对象会影响另一个独立的对象
- 允许String对象缓存
hashCode,哈希码会被频繁的使用,可以保证hash码的唯一性,更放心地进行缓存
- 安全性,会被很多类用来当做参数,如网络url,文件路径path等,如果不固定会有安全隐患
谈一谈Java成员变量,局部变量和静态变量的创建和回收时机
- 成员变量:生命周期伴随着类对象,类对象回收时也跟着回收,存在堆里
- 静态变量:在方法区随着类的加载而加载,随着类的消失而消失,如果是类在长时间不使用,不利用,不关联的情况下才有可能会被回收机制回收,所以它的生命周期特别长
- 局部变量:方法调用时创建,方法结束时会被标记为可回收,存在栈里