Integer类型如何判断值相等呢?

戚薇 Java经验 发布时间:2023-05-31 22:37:20 阅读数:6002 1
下文笔者讲述Integer类型判断值相等的方法分享,如下所示

Integer类型判断值是否相等

使用integer对象的equals方法
    即可判断integer值对象值是否相等
例:Integer对象值判断的示例
public static void main(String[] args) {
        Integer a =127;
        Integer b = 127;
        Integer c = 128;
        Integer d = 128;
        Integer e = 129;
        Integer f = 129;

        System.out.println(a==b); //true
        System.out.println(c==d);//false
        System.out.println(e==f);//false
        System.out.println(a.equals(b));//true
        System.out.println(c.equals(d));//true
        System.out.println(e.equals(f));//true
    }

Integer之equals源码

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

Integer为什么127相等,128则不相等

因为 -128 ~ 127之间的数,并放入到JVM的缓存池中
    这个Integer对象都指向同一个位置,所以,这个区间的值
	  使用 "==",返回true

-128~127的源码

 
/**
 * Cache to support the object identity semantics of autoboxing for values between
 * -128 and 127 (inclusive) as required by JLS.
 *
 * The cache is initialized on first usage.  The size of the cache
 * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
 * During VM initialization, java.lang.Integer.IntegerCache.high property
 * may be set and saved in the private system properties in the
 * sun.misc.VM class.
 */
private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                try {
                    int i = parseInt(integerCacheHighPropValue);
                    i = Math.max(i, 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                } catch( NumberFormatException nfe) {
                    // If the property cannot be parsed into an int, ignore it.
                }
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);

            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

        private IntegerCache() {}
    }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202305/16855438876669.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者