Integer比较

Integer比较

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

/**
 * @time 2014-06-25
 * @author Cao HaiCheng
 *
 */
public class demo {
	public static void main(String[] args) {
		test1();
		test2();
		test3();
		test4();
		test5();
	}
	/**
	 * 第一个答案是false非常好理解,由于'=='操作符比較的是两个对象的地址,a和b指向的地址不同
	 */
	private static void test1() {
	    Integer a = new Integer(50);  
	    Integer b = 50;  
	    System.out.println("test1执行结果:"+(a == b));   //false
	}

	/**
	 * 这个答案是true,Integer a=50属于自己主动装箱,调用的是编译器中的public static Integer valueOf(int i)方法
	 * 我们看下这种方法:
	 *     public static Integer valueOf(int i) {
        		assert IntegerCache.high >= 127;
        		if (i >= IntegerCache.low && i <= IntegerCache.high)
            		return IntegerCache.cache[i + (-IntegerCache.low)];
        		return new Integer(i);
   		   }

	 * 
	 * 我们能够看到jdk源代码中定义的这种方法意思是这种:当i的值在某个范围之间的时候不用创建对象,直接去IntegerCache中取,再看下这个
	 * IntegerCache类:
	 *     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) {
		                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);
		            }
		            high = h;
		
		            cache = new Integer[(high - low) + 1];
		            int j = low;
		            for(int k = 0; k < cache.length; k++)
		                cache[k] = new Integer(j++);
		        	}
		
		        	private IntegerCache() {}
		      }
	 * 我们看到这个Cache里面放了256个值,就是-128到127之间的值
	 * 所以当Integer a = 50;  的时候并没有创建新的对象,还是引用的缓存池中的地址,所以这个结果为true
	 */
	private static void test2() {
		   Integer a = 50;  
		   Integer b = 50;  
		   System.out.println("test2执行结果:"+(a == b)); //true 
	}

	/**
	 * 这个依据上面那个说法就简单了,由于150并不在-128到127之间,所以这个须要自己创建对象,创建的对象a和b的指向地址不同
	 * 所以该结果为false;
	 */
	private static void test3() {
	    	Integer a = 150;  
	    	Integer b = 150;  
	    	System.out.println("test3执行结果:"+(a == b));//false  
	}

	/**
	 * 这个 Integer a = Integer.valueOf(50); 和Integer b = 50;  调用的方法都是编译器中的public static Integer valueOf(int i)方法
	 * 所以两个50都没有创建新的对象,都是从缓存池中拿到的对象,所以结果为true
	 */
	private static void test4() {
	    Integer a = Integer.valueOf(50);  
	    Integer b = 50;  
	    System.out.println("test4执行结果:"+(a == b));   //true
	}

	/**
	 * 同理,数值超出了范围,所以指向不同,结果为false
	 */
	private static void test5() {
	    Integer a = Integer.valueOf(150);  
	    Integer b = 150;  
	    System.out.println("test5执行结果:"+(a == b));  //false
	}
	
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117485.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月5日 上午6:00
下一篇 2022年1月5日 上午7:00


相关推荐

  • 常用css样式大全以及css属性代码大全

    常用css样式大全以及css属性代码大全常用 css 样式大全字体属性 font 大小 font size x large 特大 xx small 极小 一般中文用不到 只要用数值就可以 单位 PX PD 样式 font style oblique 偏斜体 italic 斜体 normal 正常 行高 line height normal 正常 单位 PX PD EM 粗细 font weight bold 粗体 lighter 细体 normal 正常 变体 font va

    2026年3月18日
    3
  • git 命令总结

    1.配置gitconfig–globaluser.name"yourname"gitconfig–globaluser.emailmail@box.co

    2021年12月22日
    42
  • flex访问java对象

    flex访问java对象搞 flex 也一段时间了一直都在托托拽拽是时候搞点实际的了 做了个 flex 访问 java 类的小例子 网上也有不少这样的例子 总觉得看得有些杂 闲话不讲了 进入主题 1 写 java 类 2 改 remoting config xml 文件 3 写 mxml1 java 类 packageorg common publicclassF

    2026年3月26日
    2
  • 眼图测试分析

    眼图测试分析眼图测试分析 转载原网址 http m elecfans com article 662764 htm 原网址 http m elecfans com article 662764 htm 波形参数测试是数字信号质量评估最常用的测量方法 但是随着数字信号速率的提高 仅仅靠幅度 上升时间等的波形参数的测量方法越来越不适用了 比如下图的一个 5Gbps 的信号来说 由于受到传输通道的损耗的影响

    2026年3月18日
    1
  • js 获取当前日期和时间

    js 获取当前日期和时间显示日期在页面上 yyy MM ddfunctionin vardate newDate 年 varyear date getFullYear 月 varmonth date getMonth 1 日 varday date getDate 时 varhh date

    2026年3月20日
    2
  • 腾讯新推深度思考大模型 比DeepSeek-R1便宜3/4

    腾讯新推深度思考大模型 比DeepSeek-R1便宜3/4

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号