自动装箱和方法

除了赋值这种简单情况之外,自动装箱在基本类型必须转换为对象时会自动发生,自动拆箱在对象必须转换为基本类型时自动发生.也就是说,当实参传递给方法,或者从方法返回值时可能发生自动装箱和自动拆箱.考虑下面的程序:
public class test2
{
    // @param args
    public static void main(String args[])
    {
     AutoBox2.m(199);
     
     Integer iOb = AutoBox2.m2();
     System.out.println("return value from m2()  is "+iOb);
     
     int i = AutoBox2.m3();
     System.out.println("return value from m3()  is "+i);
    }

     iOb = 100;
     System.out.println("Square root of iOb is  "+Math.sqrt(iOb));
}
class AutoBox2
{
    static void m(Integer v)
    {
        System.out.println("m() received "+ v);
    }
    
    static int m2()
    {
        return 10;
    }
    
    static Integer m3()
    {
        return 99;
    }
}
该程序显示下面的结果:
m() received 199
return value from m2() is 10
return value from m3() is 99
Square root of iOb is 10.0
注意在该程序中,m()指定了一个Integer形参.在main()中,传递给m()方法的int值为199.由于m()接受Integer形参,该值将自动装箱.接下来调用m2(),他返回int值10.该值被赋给main()中的iOb.由于iOb是Integer,m2()返回的值被自动装箱.接下来调用m3(),他返回一个自动拆箱为int的Integer.最后,以Iob为实参调用Math.sqrt().这时,iOb被自动拆箱,其值会升级为double,因为这是Math.sqrt()所需的类型.