下面的代码:
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); 为什么也可以作为入参呢?谢谢!
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); 为什么也可以作为入参呢?谢谢!
老师说了句,很经典的话:‘万物皆对象’
10 也是对象,但是如果int a = 10;
传 test(a);就不行,因为他是数据类型。
慢慢体会吧,兄弟!
希望你能明白
^_*
这就是用来装箱与拆箱技术。如同楼上说的
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))的时候,调用的就是第一个。
而test(10)中的10 也是一个对象 所以是满足条件的
指JDK自动完成基本数据类型和对应的包装类对象之间的转换,这里系统自动将10转换为Integer的对象
char ------------Character
byte -------------Byte
int ------------Integer
short ------------Short
long ------------Long
float ------------Float
double------------Double
boolean-----------Boolean
当你使用test(10)时,10默认是int型,在此例中将自动转换成相应的封装类,
即Integer对象,所以能够被传入。