Java面试题汇总(随缘更新)
1. ==和equals的区别
答:
- 基础数据类型比较:只能使用==,比较值是否相等
- 引用数据类型比较:
- 没有重写equals方法:==和equals没有区别,比较的都是引用是否指向了同一块内存
- 重写了equals方法:equals比较的是引用的对象内容是否相等(在javaBean规定中当重写equals时必须重写hashCode,两个对象的equals相等,hashCode也必须相等,如果不相等就会造成相同的对象在HashSet存储中存储两次)
2. 堆与栈的区别
答:1. 栈内存存储的是局部变量,而堆内存存储的是实体
2. 栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短
3. 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时回收
3.HashMap与HashSet的区别
答:
HashMap | HashSet |
---|---|
实现了Map接口 | 实现了Set接口 |
存储键值对 | 仅存储对象 |
调用put()向map中添加元素 | 调用add()方法向Set中添加元素 |
HashMap使用键(Key)计算Hashcode | HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false |
HashMap相对于HashSet较快,因为它是使用唯一的键获取对象 | HashSet较HashMap来说比较慢 |
本文来自博客园,作者:Schieber,转载请注明原文链接:https://www.cnblogs.com/xiqingbo/p/interview-01.html