Java的自动装箱和自动卸载

1.Java自动装箱和拆箱

     ⒈什么是自动装箱:对于基本数据类型int,double和char 不是对象类型,有时候处理是对象型的数据因此将int、double和char 自动装箱成包装类Integer,Double和Character。
类如:对于自动装箱编译器自动调用:Integer i=Integer.valueOf(100);通过自动装箱将基本数据转化成对象
对如下程序进行断点测试:
Integer i=100;
发现程序自动的调转到Integer类的valueOf() 的方法:
从源代码看出 对于-128~127 相同对象引用,超出127 Integer 建立新的对象

equals() :方法比较两个对象中值,==比较两个对象引用地址
/**
     * Returns a <tt>Integer</tt> instance representing the specified
     * <tt>int</tt> value.
     * If a new <tt>Integer</tt> instance is not required, this method
     * should generally be used in preference to the constructor
     * {@link #Integer(int)}, as this method is likely to yield
     * significantly better space and time performance by caching
     * frequently requested values.
     *
     * @param  i an <code>int</code> value.
     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }
2.自动拆箱:将对象中基本数据从对象中取出来: 实质 :调用对象的intValue();方法
同理:
Integer integer100=100;
int int100=integer100;
进行断点测试发现确实调用的是intValue()方法
/**
     * Returns the value of this <code>Integer</code> as an
     * <code>int</code>.
     */
    public int intValue() {
	return value;
    }

3.总结: 
    1).查看下面是属于自动装箱还是自动拆箱:对象==基本数据类型  进行自动拆箱操作 当两个对象进行比较==比较相同的地址引用
	public static void main(String[] args)
	{
		Integer integer100=100;
		int int100=100;
		System.out.println(integer100==int100);
			
	}

运行结果是 true:
 原因:如果是自动装箱的话 那么==比较两个实例的引用地址,明显出现false,但是运行结果True,表明对象数据类型与基本数据类型进行 比较对象进行自动拆箱操作
   2).代码编译通过,运行时候抛出空指针异常,主要在自动拆箱对象中null,基本数据类型没有null概念
所以自动拆箱时候注意 不能有 null 对象
    
Integer integer100=null;
int int100=integer100;
 运行结果 Java.lang.nullPointError()异常
3).Integer 自动装箱时候 注意-128~127 相同的地址引用,超过这个范围之后 开辟新的对象

  运行结果 true false

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值