一些Java面试很基础但是你可能不知道怎么表达的题目

目录

1.1请你说明String和StringBuffer的区别

 1.2请你说明一下int和Integer有什么区别

1.3数组Array和ArrayList有什么区别,时候时候用Array什么时候用ArrayList? 

1.4什么是值传递和引用传递?

1.5Java支持的数据类型有那些,什么是自动拆装箱?

1.6符号"=="比较的是什么?

1.7Object若是不重写hashCode()的话,hashCode()是如何计算出来的? 

1.8为什么重写equals还要重写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方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值