java包装类笔记

java包装类:Boolean,Byte,Short,Character,Integer,Long,Float,Void

一些常用的方法:

Integer obj=new Integer(145)
new Integer("-45.36")
obj.toString()
obj1.equals(obj2)
obj.hashCode();
Integer.parseInt(args[0])
obj.intValue();




包装类的自动装箱,自动拆箱
自动装箱:每当需要一种类型的对象时,这种基本类型就自动地封闭到与它相同类型的包装中
自动拆箱:每当需要一个值时,被装箱对象中的值就被自动提取出来

int i=11; 
Integer j=i;//自动装箱
int k=j;//自动拆箱




Integer a=100;相当于如下
Integer a=Integer.valueOf(100);




例子:
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer a=100;
		Integer b=100;
		Integer c=200;
		Integer d=200;
		System.out.println(a==b);//true 同一个对象的引用
		System.out.println(c==d);//false >128 new一个新对象
		System.out.println(a==100);//true 基本类型比较
		System.out.println(d==200);//true 基本类型的比较
	}


为什么第二个c==d的结果是false,而第一个a==b的结果是true。

原来

在jdk中源码中valueOf方法是这样的:
public static Integer valueOf(int i){
	final int offset=128;
	if(i>=-128 && i<=127){
		return IntegerCache.cache[i+offset];
	}else{
	return new Integer(i);
	}
	private static class IntegerCache{
		private IntegerCache(){}
		static final Integer cache[]=new Integer[-(-128)+127+1];
		static{//statoc只能初始化一次,在对象间共享,即不同的对象共享同一个static数据
			for(int i=0;i<cache.length;i++){
				cache[i]=new Integer(i-128);
			}
		}
	}
}


IntegerCache类中有一个数组缓存了值从-128到127的Integer对象

上例中Interger c=200相当于c=Integer.valueOf(200);根据源码,200大于127,所以方法返回的是new Integer(200);所以这里c和d是不同的对象引用。

而Integer a=100相当于a=Integer.valueOf(100);根据源码,100小于127,返回了IntegerCache中的缓存中的一个值。

Integer a=127
Integer b=127时,并没有new出一个新对象,而是共享了a这个对象的引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值