下面的代码:
public class TestObject {
   public static void test(Object o)
   {
   System.out.println(o);    
   }
   
   public static void main(String args[])
   {
 test(new Integer(10));   
 test(10);  
   }
}test(new Integer(10));   可以理解。
但是test(10);  为什么也可以作为入参呢?谢谢!

解决方案 »

  1.   

    这种技术在JAVA里叫做基本类型的装箱与拆箱自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中。自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue()和doubleValue()方法。自动装箱,只需将该值赋给一个类型包装器引用,java会自动创建一个对象。例如: Integer i=100;//没有通过使用new来显示建立,java自动完成。自动拆箱,只需将该对象值赋给一个基本类型即可。例如:int j=i;
      

  2.   

    哈哈,当我老师给我上这一课的时候:
    老师说了句,很经典的话:‘万物皆对象’
    10 也是对象,但是如果int a = 10;
     传 test(a);就不行,因为他是数据类型。
    慢慢体会吧,兄弟!
    希望你能明白
    ^_*
      

  3.   

    建议你去看看java中的装箱与拆箱,看过之后你就会豁然开朗。
    这就是用来装箱与拆箱技术。如同楼上说的
      

  4.   

    2楼理解好像有误,自动装箱好像是5.0才引入的,如果把楼主的程序块用5.0之前编译,估计test(10)还是报错的。
      

  5.   

    谢谢一楼!同样也谢谢二楼。不过二楼的回复有一部分是错误的。我刚刚试了:package object.exam;public class TestObject {
       public static void test(Object o)
       {
       System.out.println(o);    
       }
       
       public static void test2(int i)
       {
       System.out.println(i);    
       }
       
       public static void main(String args[])
       {
     test(new Integer(10));   
     test(10); 
     int a =10;
     test(a);

     test2(new Integer(20));
       }   
    }其中test(a)是可以执行的。反过来,test2函数完成了一个“自动拆箱”的过程。
    这样带来一个问题这种灵活性使得 函数重载变得捉摸不透了。
    比如上面的函数test2(int i)如果换成test(int i),然后再调用test(new Integer(20))的时候,调用的就是第一个。
      

  6.   

    object类是所有类的祖先  所以object声明的变量作为形式参数,那么一切实例化对象都可以是一个有效的实参
    而test(10)中的10 也是一个对象  所以是满足条件的
      

  7.   

    object类是基类,所有类都是继承object类来实现的
      

  8.   

    这个是JDK从1.5版本以后新增的语法,称作自动拆装箱
    指JDK自动完成基本数据类型和对应的包装类对象之间的转换,这里系统自动将10转换为Integer的对象
      

  9.   

    10会被自动装箱,也就是把基本类型的int类型的10,转换成一个Integer类型对象,每个基本类型都有相对应的包装类.具体实现记得是把存储位置从栈移到堆.好像是这样...
      

  10.   

    JDK自动完成基本数据类型和对应的包装类对象之间的转换,这里系统自动将10转换为Integer的对象
      

  11.   

    "10会被自动装箱,也就是把基本类型的int类型的10,转换成一个Integer类型对象,每个基本类型都有相对应的包装类. "
      

  12.   

    jdk5.0 新特性 自动封箱和解封
      

  13.   

    基本类---对应----封装类
    char  ------------Character
    byte -------------Byte            
    int   ------------Integer
    short ------------Short
    long  ------------Long
    float ------------Float
    double------------Double
    boolean-----------Boolean
    当你使用test(10)时,10默认是int型,在此例中将自动转换成相应的封装类,
    即Integer对象,所以能够被传入。