目录
1.3数组Array和ArrayList有什么区别,时候时候用Array什么时候用ArrayList?
1.7Object若是不重写hashCode()的话,hashCode()是如何计算出来的?
1.1请你说明String和StringBuffer的区别
String是常量,而StringBuffer是变量。
StringBuffer对象的内容可以修改,而String对象对象一旦产生后就不可被修改,我们做的重新赋值或者字符串拼接操作都会生成一个新的String对象。
StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不能生成新的对象,内部有专门的字符串修改方法,在内存使用上要优于String,因此在实际使用中,如果经常需要对一个字符串进行修改、删除、插入等操作,使用StringBuffer更加合适。
1.2请你说明一下int和Integer有什么区别
Integer是int的包装类,int是基本数据类型。
Integer必须实例化后才能使用,而int变量不需要。
Integer的默认值是null,int的默认值是0。
1.3数组Array和ArrayList有什么区别,时候时候用Array什么时候用ArrayList?
Array可以包含基本数据类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,在申请数组的时候就要初始化并确定长度,ArrayList大小是动态变化的。
ArrayList的内部方法能更好的修改数组,比如addAll(),removeAll()等。
当确定长度并且数据类型一致的时候就可以用Array,其他时候可以用ArrayList。
1.4什么是值传递和引用传递?
值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。
引用传递:是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。
Java中只有值传递。
1.5Java支持的数据类型有那些,什么是自动拆装箱?
支持的类型包括:
基本数据类型:int, double, float, boolean, long, short, byte, char
引用数据类型:数组, 类, 接口
什么是自动拆装箱:
java是一个面向对象的语言,但是java的基本类型确是不面向对象的,为解决这个问题在设计类时,每个基本类型都设计了一个对应的类进行表示,这样和八个基本类型相对应的类称为包装类(wrapp calss)。包装类位于java.lang包,对应关系如下:
自动装箱:
就是将基本数据类型自动转换为对应的包装类;
自动拆箱:
就是将包装类自动转换为基本数据类型。
1.6符号"=="比较的是什么?
1、对于对象引用类型:“==”比较的是对象的内存地址。
所以就算两个对象的值相等,它们也是不等的(因为每个对象的地址都是不一样的)
2.对于基本类型数据,其实比较的是它的值。
所以一般用==来比较两个数字大小是不是相等的
1.7Object若是不重写hashCode()的话,hashCode()是如何计算出来的?
根据对象的内存地址计算的
1.8为什么重写equals还要重写hashCode()?
equals 比较是直接判断两个对象的内存地址,而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的。
hashcode规定:
两个对象相等,hashcode一定相等
两个对象不等,hashcode不一定不等
hashcode相等,两个对象不一定相等
hashcode不等,两个对象一定不等
假设上面只重写了equals方法,判断两个对象是相等的,没有重写object的hashcode方法的话,就会调用object的hashcode方法比较这两个对象的内存地址,而两个对象的内存地址是不相等的,所以hashcode的值也是不相等的,这就违背了equals相等,hashcode一定相等的规定,所以重写equals的时候必须重写hashcode方法。