zoukankan      html  css  js  c++  java
  • Integer大小比较问题

    public static void main(String[] args) throws NoSuchFieldException,
    IllegalAccessException {
    Integer a = 1000, b = 1000;
    System.out.println(a == b);//1
    Integer c = 100, d = 100;
    System.out.println(c == d);//2

    System.out.println(100 == 100); // 3
    System.out.println(1000 == 1000); // 4

    Class cache = Integer.class.getDeclaredClasses()[0];
    Field myCache = cache.getDeclaredField("cache");
    myCache.setAccessible(true);

    Integer[] newCache = (Integer[]) myCache.get(cache);
    newCache[132] = newCache[133];

    int a2 = 2;
    int b2 = a2 + a2;
    System.out.printf("%d + %d = %d", a2, a2, b2); // 5
    }

    控制台打印结果:

    false
    true
    true
    true
    2 + 2 = 5

    原因:对于Integer来说,-128-127之间的整型已经初始化放在IntegerCache中,如果是在这个范围内的话,其实引用的都是一个对象值,否则是不同的对象额

    所以如果不在这个范围内的话,比较Integer的话,是用equals()比较了额

  • 相关阅读:
    hello world
    first demo
    Mac出现Operation not permitted
    java 获取一个数字中,各个数字出现的次数
    java 判断回文数字
    202001031
    20200103
    华为手机的系列
    java 反向打印一个数字
    java 生成两个数之间的素数
  • 原文地址:https://www.cnblogs.com/holdon521/p/4999779.html
Copyright © 2011-2022 走看看