Integer面试题

package com.cc.demo1;

public class IntegerTest {
    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); //true
        System.out.println(e == f); //false

        //存在a+b数值表达式,比较的是数值
        System.out.println(c == (a + b)); //true
        
        //equals比较的是数值
        System.out.println(c.equals(a + b));//true
        
       	//存在a+b数值表达式,比较的是数值
        System.out.println(g == (a + b));//true
        
         // Long的equals()先判断传递进来的是不是Long类型,而a+b自动装箱的是Integer类型
        System.out.println(g.equals(a + b));//false
        
        //从下面的两个比较中,可以看出一个Integer和Long想加,结果是Long类型
        System.out.println(g.equals(a + h));//true

		System.out.println(c.equals(a + h));//false
		
    }
}

肯定很多人都知道, 在Java中有一个Integer缓存池,缓存的大小是:-128~127。

这里说一下:

使用 **== **的情况:

  • 如果比较的是Integer变量,默认比较的是地址值。
  • Java的Integer维护了从-128~127的缓存池。
  • 如果比较的某一边有操作表达式(如a+b),那么比较的是具体数值。

使用 equals () 的情况:

  • 无论是Integer还是Long中的equals() 默认比较的是数值。
  • Long的equals()方法,JDK的默认实现:会判断是否是Long类型

看一下Long中equals()方法的源码:

 public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }

会先判断是否为Long类型,不是Long,返回false。

再看一下Intege中equals方法的源码:

 public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

也会先判断是否是Integer类型。

简单的看一下instanceof。

instanceof是Java、php的一个二元操作符(运算符),和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。相当于c#中的is操作符。java中的instanceof是通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值