2023-3-8面经
1.请你说明一下int 和 Integer有什么区别?
int 是基本数据类型,integer是包装数据类型,他们可以通过装箱拆箱互相转换,integer是对象必须实例化之后才能使用,具有对象的基本方法。Integer的默认值是null,而int的默认值是0。
2.请你说明String和StringBuffer 和StringBulder的区别?
Sting是个常量不能被改变,其他可以,每次声明都要重新开辟一个空间,StringBuffer是线程安全的使用synchronized关键字,但是效率是相对较低的,后两默认初始容量是16
3.Array和ArrayList的区别?什么时候使用Array更好?
Array是普通数组,ArrayList是可变数组集合,前者必须指定大小,后者不需要,可以自动扩容,前者可以存储基本数据类型,后者只能存对象,ArrayList有更多的操作方法。在大小确定的情况下,用Array更好
4.什么是值传递,什么是引用传递?
值传递:将参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递:将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
5.java支持的数据类型有哪些?什么是自动拆装箱?
1.基本数据类型,2.引用数据类型:类,接口,数组
Integer i =10; //自动装箱int b= i; //自动拆箱
Integer i=10 可以替代 Integer i = new Integer(10);
6.java8的新特性,简单介绍一下?
1.lambda表达式 可以简化代码
2.函数式编程 @FunctionalInterface 接口上面
只要一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式来表示
3.Stream流 创建 Stream 中间操作 终止操作(终端操作)
4.Optional类 原来用 null 表示一个值不
存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
7.为什么重写equals还需要重写code?
为了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equal都是根据对象的特征进行重写的),保证相同的对象返回相同的hash值,不同的对象返回不同的hash值。
如果不重写hashCode方法,调用的是Object中的hashCode方法。ps :两个对象相等,hashcode一定相等
两个对象不等,hashcode不一定不等
hashcode相等,两个对象不一定相等
hashcode不等,两个对象一定不等
8.Object的equals和hashcode方法怎么对比的
在Object类中,==
运算符和equals方法是等价的,String是引用类型,比较时不能比较引用是否相等,而是比较字符串的内容是否相等。
由于在Object中,因此每个对象都有一个默认的哈希值,只对比哈希值是否相等。