Integer、Long包装类的比较==/equals

@Test
void test() {
    Long i = Long.valueOf(-1);
    Long j = Long.valueOf(1);
    Long k = 1L;
    Long m = 100L;
    Long u = 200L;

    System.out.println(i==-1);
    System.out.println(i.equals(-1));
    System.out.println("=======1==========");

    System.out.println(j==1);
    System.out.println(j.equals(1));
    System.out.println("=======2==========");

    System.out.println(k==1);
    System.out.println(k.equals(1));
    System.out.println("=======3==========");

    System.out.println(m==100);
    System.out.println(m.equals(100));
    System.out.println("=======4==========");

    System.out.println(m==100L);
    System.out.println(m.equals(100L));
    System.out.println("=======5==========");

    System.out.println(u==200);
    System.out.println(u.equals(200));
    System.out.println("=======6==========");

    Integer s = 1;
    Integer d = 1;
    System.out.println(s==d);

    Integer t = 200;
    Integer r = 200;
    System.out.println(t==r);
}

结果:

true
false
=======1==========
true
false
=======2==========
true
false
=======3==========
true
false
=======4==========
true
true
=======5==========
true
false
=======6==========
true
false

原理:

以Integer为例:

在 Integer 这个封装类里面,除了基本的 int 类型的操作之外,还引入了享元模式的设计,对-128 到 127 之间的数据做了一层缓存,如果 Integer 类型的目标值在-128 到 127 之间,就直接从缓存里面获取 Integer 这个对象实例并返回,否则创建一个新的 Integer 对象。

如果直接用==号来判断,返回的结果必然是 true,因为这两个 Integer 指向的内存地址是同一个。否则,返回的结果是 false。

如果使用equals比较,则是先比较类型再比较值,比如例4使用equals是false,比较类型是一个Integer。

阿里巴巴强制要求使用包装类型定义属性?

1、默认值问题:使用基本数据类型定义属性时,如果没有给属性赋初始值,会使用默认值(如 int 的默认值为 0), 而使用包装类型定义属性,如果没有给属性赋初始值,属性的值为 null,这样可以更加清晰地表达属性的状态。

2、 拆箱问题:在一些特定场景下,如果使用基本数据类型定义属性,需要进行多次装箱和拆箱操作,这个操作会带来额外的性能开销和代码复杂度。而使用包装类型定义属性,可以避免这个问题,提高代码的效率和可读性。
3、Java 中的泛型中只能使用对象类型,如果要在泛型编程中使用基本类型,就必须使用对应的包装类型。
4. 提供了基本类型所不具备的方法和属性,比如 equals()、hashCode()、toString(),这些方法在某些特定场景中会比较有用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Integer类是Java中的一个包装类,用于将基本数据类型int封装成一个对象。它提供了一些方法,可以方便地进行数字的转换、比较和运算等操作。在Java中,使用Integer类可以使代码更加简洁和易于维护。例如,可以使用Integer.parseInt()方法将字符串转换为整数,使用Integer.toString()方法将整数转换为字符串。此外,Integer类还提供了一些常量,如MAX_VALUE和MIN_VALUE,用于表示整数的最大值和最小值。在实际开发中,Integer类经常用于处理数字类型的数据,是Java编程中不可或缺的一部分。 ### 回答2: Java中的包装类是指能够将基本数据类型转换为对象的一组类,例如IntegerLong、Double等。这些包装类提供了各种方法,可以方便地在基本数据类型和对象之间进行转换并执行各种操作。 其中,Integer类是Java中用于封装int类型的包装类。它提供了很多实用的方法,例如将字符串转换为整数、将整数转换为二进制字符串、将字符串解析为整数等。 下面,我将介绍几个Integer类的常用方法: 1. intValue(): 将Integer对象转换为int类型。 例如:Integer num = 123; int n = num.intValue(); 2. valueOf(String s): 将字符串转换为Integer对象。 例如:Integer num = Integer.valueOf("456"); 3. parseInt(String s): 将字符串解析为int类型。 例如:int num = Integer.parseInt("789"); 4. toBinaryString(int i): 将十进制整数转换为二进制字符串。 例如:String binStr = Integer.toBinaryString(10); // 输出为 "1010" 5. toString(int i): 将整数转换为字符串。 例如:String str = Integer.toString(123); 上述五个方法是Integer类中的常用方法,还有其他的方法,例如:compareTo、equals、valueOf等。 总之,Integer类在Java中起到了非常重要的作用,它提供了很多方便的方法,可以帮助我们更加灵活地处理整型数据。如果掌握了Integer类的使用方法,将会对Java编程有很大的帮助。 ### 回答3: Java包装类指的是将Java的基本数据类型转化为对象的类,封装了基本数据类型,方便在Java程序中进行各种操作,其中Integer类是其中的一种。Integer类封装了一个基本类型int的值,并提供了一系列操作这个值的方法。绝大多数情况下,我们使用Java的基本类型,但有时需要一个对象,这时候就可以使用Integer类。 1.创建Integer对象 创建Integer对象有两种方法。一种是使用包装器函数valueOf将基本类型转化为对象。另一种是使用构造函数Integer(int value)创建对象。下面举例说明: int a = 12; Integer b1 = Integer.valueOf(a); //使用valueOf()方法 Integer b2 = new Integer(a); //使用构造函数 2.转化为基本数据类型 当我们需要将一个Integer对象转化为基本类型时,可以使用intValue()方法。下面是示例代码: Integer b = new Integer(12); int a = b.intValue(); // a=12 3.比较两个Integer对象 当需要比较两个Integer对象大小时,可以使用compareTo()方法,它会根据对象值的大小来判断其大小,返回值为1、0或-1。代码示例如下: Integer b1 = 12; Integer b2 = 20; int result = b1.compareTo(b2); // result=-1,说明b1小于b2 4.计算最大值和最小值 如果需要计算多个Integer对象的最大值和最小值,可以使用Math类的max和min方法。例如: Integer b1 = 20; Integer b2 = 12; int maxResult = Math.max(b1, b2); // maxResult=20 int minResult = Math.min(b1, b2); // minResult=12 总的来说,Integer类为我们在处理基本数据类型时提供了很大的灵活性和方便性,同时也便于我们进行一些高级的操作,如排序、比较大小等。因此,在Java的开发中,使用包装类能够更好的适应各种开发需求,提升程序的可靠性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值