Integer常见面试题

 

给大家出一道小儿科的题:
public class TestInteger {
    public static void main(String[] args) {
        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        long h = 2L;
        System.out.println(c == d);
        System.out.println(e == f);
        System.out.println(c == (a+b));
        System.out.println(c.equals(a+b));
        System.out.println(g == (a + b));
        System.out.println(g.equals(a + b));
        System.out.println(g.equals(a + h));
    }
}
答案是多少呐,你一定在嘀咕这还不简单呐,答案是

true

true

true

true

true

false

如果你这样想,我只能说你还太嫩,首先不公布答案呐,最后在公布,先分析分析

1.我们知道在编码的时候能不用integer就不用这种包装类,因为它有个装箱和拆箱的过程,会浪费时间,

2.Integer的缓存范围大家想必都知道就是-128(-2的7次方)到127(2的7次方-1)超出这个范围就会在堆中重新分配内存,所以比较的值超出这个范围地址就会不一样

------------------------------------------------------------------------------------

再来说一下==这种运算法的比较,它的比较会先比较地址值,

如果比较的一边有操作表达式,会比较数值

------------------------------------------------------------------------------------

再来说一下equals

它在比较的时候会优先比较数值

但是Long类型的equals会首先判断是否属于Long,

------------------------------------------------------------------

好了公布正确答案

true
true
true
true
true
false
true

最后一个的解释是,a+h,a是Integer,h是Long,在进行运算时,会自动转化为Long类型的进行运算,所以是true

而倒数第二个a+b都是intrger类型的,所以不会进行转化,所以还是Integer类型的与Long类型没法比较。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值