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
	}
	
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • phpstorm2021 激活码【2021免费激活】

    (phpstorm2021 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~2QQ4OQYW6M-eyJsaWNlb…

  • 用python做学生信息管理系统_python管理系统实例

    用python做学生信息管理系统_python管理系统实例Python面向对象版学员管理系统文章目录Python面向对象版学员管理系统目标一.系统需求二.准备程序文件2.1分析2.2创建程序文件三.书写程序3.1student.py3.1.2程序代码3.2managerSystem.py3.2.1定义类3.2.2管理系统框架3.3main.py3.4定义系统功能函数3.4.1添加功能3.4.2删除学员3.4.3修改学员信息3.4.5查询学员信息3.4.6显示所有学员信息3.4.7保存学员信息3.4.8加载学员信息四.总结

  • Linux – quota的举例说明

    实作Quota流程-1:文件系统支持[root@www~]#df-h/homeFilesystemSizeUsedAvailUse%Mountedon/dev/hda34.8G740M3.8G17%/home[root@www~]#mount|grephome/dev/hda3on/ho

  • git 重置用户名 密码信息

    gitclone时,权限不够。如fatal:unabletoaccess:TherequestedURLreturnederror:403可能原因是,你之前在本电脑使用过git.但是以前和现在又不是同一个账户。所以当你现在使用gitcloneurl时,默认使用以前的账户信息。所以出现没有权限的状况。解决方法:重置本机保留的gitconfig信息。…

  • bool 函数用法「建议收藏」

    bool 函数用法「建议收藏」 BOOL是布尔型变量,也就是逻辑型变量的定义符,类似于float、double等,只不过float定义浮点型,double定义双精度浮点型。在objective-c中提供了相似的类型BOOL,它具有YES值和NO值。布尔型变量的值只有真(true)和假(false),可用于逻辑表达式,也就是“或”“与”“非”之类的逻辑运算和大于小于之类的关系运算,逻辑表达式运算结果为真或为假。(百科) …

发表回复

您的电子邮箱地址不会被公开。

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