java常量池-Integer

public static void main(String [] args) {
		// Integer
		//Java为了提高性能提供了和String类一样的对象池机制,
		//Java的八种基本类型的包装类(Packaging Type)也有对象池机制,范围是-128~127
		Integer i1 = 20;
		Integer i2 = 20;
		Integer i3 = 0;
		Integer i4 = new Integer(20);
		Integer i5 = new Integer(20);
		Integer i6 = new Integer(0);

		System.out.println("i1=i2\t" + (i1 == i2));//true
		System.out.println("i1=i2+i3\t" + (i1 == i2 + i3));//true
		System.out.println("i4=i5\t" + (i4 == i5));//false
		System.out.println("i4=i1\t" + (i4 == i1));//false
		System.out.println("i4=i5+i6\t" + (i4 == i5 + i6));//true
		System.out.println("i2=i5+i6\t" + (i2 == i5 + i6));//true
		/*Java的数学计算是在内存栈里操作的,Java会对i5、i6进行拆箱操作,其实比较的是
		 * 基本类型(20=20+0),他们的值相同,因此结果为True。
		 * */

		System.out.println();
/*
 * 也就是说这种方式声明一个Integer对象时,JVM首先会在Integer对象的缓存池中查找有木有值为20
 * 的对象,如果有直接返回该对象的引用;如果没有,则使用New keyword创建一个对象,并返回该对象的
 * 引用地址。因为Java中【==】比较的是两个对象是否是同一个引用(即比较内存地址),i2和i2都是引用
 * 的同一个对象,So i1==i2结果为”true“;而使用new方式创建的i4=new Integer(20)、
 * i5=new Integer(20),虽然他们的值相等,但是每次都会重新Create新的Integer对象,不会
 * 被放入到对象池中,所以他们不是同一个引用,输出false。
 * */
		
		//-128----------127
		
		Integer i11 = 800;
		Integer i22 = 800;
		Integer i33 = 0;
		Integer i44 = new Integer(800);
		Integer i55 = new Integer(800);
		Integer i66 = new Integer(0);

		//因为i11,i22已经超过了常量池的范围,所以jvm会为他们各自创建新的对象
		//ii1 = new Integer(800)	ii12 = new Integer(800)
		//所以他们不是同一个引用
		System.out.println("i11=i22\t" + (i11 == i22));//false
		
		//java的数学计算是在栈中操作的,需要进行拆箱操作,比较的是基本数据类型
		System.out.println("i11=i22+i33\t" + (i11 == i22 + i33));//true
		
		System.out.println("i44=i55\t" + (i44 == i55));//false
		System.out.println("i11=i44\t" + (i44 == i11));//false
		//java运算在栈中进行,比较的是基本数据类型
		System.out.println("i44=i55+i66\t" + (i44 == i55 + i66));//true
		System.out.println("i22=i55+i66\t" + (i22 == i55 + i66));//true
		
		Integer t1 = -129;
		Integer t2 = -129;
		System.out.println(t1==t2);//256,255,128 ---false
									//127,-128----true
	}
	    	int i=200;
	    	Integer j = new Integer(200);
	    	Integer k = 200;
	    	System.out.println(i==j);//true 和int型比较时候自动拆包
	    	System.out.println(i==k);//true
	    	System.out.println(j==k);//true


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值