博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Integer比较
阅读量:6312 次
发布时间:2019-06-22

本文共 2750 字,大约阅读时间需要 9 分钟。

/** * @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	}	}

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

你可能感兴趣的文章
如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
查看>>
《OpenACC并行编程实战》—— 导读
查看>>
机器学习:用初等数学解读逻辑回归
查看>>
如何在 Ubuntu 中管理和使用逻辑卷管理 LVM
查看>>
Oracle原厂老兵:从负面案例看Hint的最佳使用方式
查看>>
把自己Github上的代码添加Cocoapods支持
查看>>
C语言OJ项目参考(2493)四则运算
查看>>
零基础入门深度学习(二):神经网络和反向传播算法
查看>>
find和xargs
查看>>
数据结构例程—— 交换排序之快速排序
查看>>
WKWebView代理方法解析
查看>>
IOS定位服务的应用
查看>>
[SMS&WAP]实例讲解制作OTA短信来自动配置手机WAP书签[附源码]
查看>>
IOS中图片(UIImage)拉伸技巧
查看>>
【工具】系统性能查看工具 dstat
查看>>
基于zepto或jquery的手机端弹出框成功,失败,加载特效
查看>>
php引用(&)
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>