Java中Integer和int的使用及注意点

 更新时间:2025年01月03日 09:49:01   作者:心流时间  
文章主要介绍了Java中Integer和Long类的缓存机制以及它们的比较方式,Integer和Long类在-128到127之间的值会被缓存,因此在这个范围内的值比较时可以使用==运算符,而超出这个范围的值则需要使用equals()方法进行比较

1. Integer缓存了-128到127之间的值

不在这个范围,比较值时需要用equals()方法

  • 在这个范围内,Integer.value(int i) 将返回相同的对象实例。
  • 超出这个范围,每次调用都会创建新的Integer对象。
  • Long也是。
    public static void main(String[] args) {
        // Integer和Long都是缓存在-128~127之间,所以可以直接比较,不用equals
        Integer i1 = 127;
        Integer i2 = 127;
        System.out.println(i1 == i2);
        System.out.println(i1.equals(i2));
        System.out.println("=====");
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i3 == i4);
        System.out.println(i3.equals(i4));
        System.out.println("=====");

        Long ii1 = 127L;
        Long ii2 = 127L;
        Long ii3 = 128L;
        Long ii4 = 128L;
        System.out.println(ii1 == ii2);
        System.out.println(ii3 == ii4);
        System.out.println(ii1.equals(ii2));
        System.out.println(ii3.equals(ii4));
    }
  • 打印:

true
true
=====
false
true
=====
true
false
true
true

Integer的equals方法源码

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

结论:

  • 通过equals()源码可以看到它是比较的Integer中具体的值,
  • 所以我们如果是比较对象或者比较-128~127的值可以用==,
  • 而如果比较其他的值就需要用equals()了

2. 由于int类型是基本数据类型,Integer拆箱时不能为空

  • 例1:
    public static void main(String[] args) {
        // 由于int类型是基本数据类型,拆箱时不能为空
        // 例1
        Integer i5 = null;
        System.out.println(i5 == 3);
    }

报错:

  • 例2:
    public static void main(String[] args) {
        // 由于int类型是基本数据类型,拆箱时不能为空
        // 例2
        Integer i5 = null;
        test1(i5);
    }

    public static void test1(int i) {
        System.out.println(i);
    }

结论:

  • 除了缓存导致比对值可能出现问题之外,
  • 我们熟知的Integer是包装类,可以为null,int是基本数据类型,不可以为null,
  • 在这一点上别忘了包装类拆箱时不能为null的问题。
  • 所有包装类拆箱成基本数据类型时都存在此问题。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论