JAVA基础——关于java中数字类型面试题

很经典的两道关于数字类型面试的题目

一、两个数字之间的==的比较输出的结果


在控制台打印的结果 true和false.

为什么两个数字相等,却有不一样的结果。这里考察的知识点是

1.==比较的是什么?

2.Integer的缓存范围,或者说内部机制?

3.jvm内部原理?

先从第一个回答起,==对于基本类型的比较(8大基本类型),比较的是两个‘值’是否相等。而对于引用类型,比较的则是所指向对象的地址。

第二个问题回答,Integer本身是一个包装类型(包装类型属于引用类型),而非基本类型。Integer内部在对数值进行装箱操作时,会判断该数字是否在-128~127之间,如果在这之间会将其放入IntegerCache中(详情追查源码)。如果定义一个数时,例如第一种情况则只会有一个数字的地址。第二种超过范围情况则会有两个数字。

第三个回答,JVM在我们创建对象时,会先在栈(stack)中创建对象名(a,b等),再在堆(heap)中创建对象值(1,128等)。而堆中值的地址会指向栈中对象,c语言中是用指针来完成这一过程。而java则内部处理了。

综上我们可以理解,a和b的==比较,就是包装类型(引用类型)指向对象地址的比较。当Integer在-128-127之间会缓存数字,即只有一个地址则比较结果为true。超过这个范围,在jvm堆中产生两个不同对象值,比较结果为false.


二、两个不同的引用类型(数字)的转换。


一般遇到交换两个值,我们首先想到的是中间变量来处理这件事。但这里要求的是一种方法交换两个数字的值,我们可以将其理解为一个工具类。而简单换两个值,利用中间变量,并不能返回结果,所以这里不成立。

深入理解值赋予变量(一般是包装类型),要么是值的互换,或者引用地址的互换。在这里考察的是引用地址的交换。

在这里考察的知识点:

1、反射(reflect)

2、JVM内部变量的原理。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值