需要了解核心java中的装箱 我不知道在下面的例子中如何将int 7作为对象来考虑。 SIFER(7)被认为是方法siFER(对象O)。我不知道这是怎么发生的。在我的一本java参考书中,它说Int可以装箱为整数,然后“加宽”为对象。我不知道那是什么意思 >> Class A class A { } >> Class B class B extends A { } >> Class ComingThru public class ComingThru { static String s ="-"; static void sifer(A[] ...a2) { s = s + "1"; } static void sifer(B[] b1) { s += "3"; } static void sifer(Object o) { s += "4"; } public static void main(String[] args) { // TODO Auto-generated method stub A[] aa= new A[2]; B[] ba = new B[2]; //sifer(aa); //sifer(ba); sifer(7); System.out.println(s); }
}需要了解核心java中的装箱 我不知道在下面的例子中如何将int 7作为对象来考虑。 SIFER(7)被认为是方法siFER(对象O)。我不知道这是怎么发生的。在我的一本java参考书中,它说Int可以装箱为整数,然后“加宽”为对象。我不知道那是什么意思 >> Class A class A { } >> Class B class B extends A { } >> Class ComingThru public class ComingThru { static String s ="-"; static void sifer(A[] ...a2) { s = s + "1"; } static void sifer(B[] b1) { s += "3"; } static void sifer(Object o) { s += "4"; } public static void main(String[] args) { // TODO Auto-generated method stub A[] aa= new A[2]; B[] ba = new B[2]; //sifer(aa); //sifer(ba); sifer(7); System.out.println(s); },java,object,autoboxing,Java,Object,Autoboxing,}7将转换为整数,它是一个对象 另请参见 7将转换为整数,这是一个对象 另请参见 由于没有sifer(int)方法,编译器将尝试查找“最接近的匹配”。在本例中,其他2个sifer方法将数组作为参数,而int显然不是 最后一种方法,sifer(Object)可以应用于任何对象,包括整数,因此这就是用于sifer(7)的方法 和JVM将按以下顺序查找匹配的方法: 身份转换 在您的情况下:sifer(int),但是没有这样的方法 扩大的原语转换 在您的例子中:sifer(long),但
7
将转换为整数
,它是一个对象
另请参见
7
将转换为整数
,这是一个对象
另请参见
sifer(int)
方法,编译器将尝试查找“最接近的匹配”。在本例中,其他2个sifer
方法将数组作为参数,而int显然不是
最后一种方法,sifer(Object)
可以应用于任何对象,包括整数
,因此这就是用于sifer(7)
的方法
和JVM将按以下顺序查找匹配的方法:
- 身份转换
- 在您的情况下:
,但是没有这样的方法sifer(int)
- 在您的情况下:
- 扩大的原语转换
- 在您的例子中:
,但是没有这样的方法sifer(long)
- 在您的例子中:
- 扩展引用转换
- 在您的情况下:不适用,int不是对象
- 装箱转换(可选)后接加宽引用转换
- 在您的例子中,就是这样:int被装箱为Integer,而Integer被加宽为Object
- 取消装箱转换(可选)后接加宽原语转换
- 在您的情况下:不适用
由于没有
sifer(int)
方法,编译器将尝试查找“最接近的匹配”。在本例中,其他2个sifer
方法将数组作为参数,而int显然不是
最后一种方法,sifer(Object)
可以应用于任何对象,包括整数
,因此这就是用于sifer(7)
的方法
和JVM将按以下顺序查找匹配的方法:
- 身份转换
- 在您的情况下:
,但是没有这样的方法sifer(int)
- 在您的情况下:
- 扩大的原语转换
- 在您的例子中:
,但是没有这样的方法sifer(long)
- 在您的例子中:
- 扩展引用转换
- 在您的情况下:不适用,int不是对象
- 装箱转换(可选)后接加宽引用转换
- 在您的例子中,就是这样:int被装箱为Integer,而Integer被加宽为Object
- 取消装箱转换(可选)后接加宽原语转换
- 在您的情况下:不适用
1。上述代码提供了一个方法重载的经典示例,以及Java 1.5提供的自动装箱和自动拆箱,因为手动装箱和拆箱很痛苦 2.
筛选器(A[]…a2)
和筛选器(B[]b1)
都接受其参数中的数组类型参数,这些参数与int不匹配。因此,现在只剩下筛选器(对象o)
3。现在,int
将自动转换为包装对象整数
您可以在snifer(objecto)方法中进行验证
有关更多详细信息,请参阅此链接:
1。上述代码提供了一个方法重载的经典示例,以及Java 1.5的自动装箱和自动拆箱,因为手动装箱和拆箱是一种痛苦 2.
筛选器(A[]…a2)
和筛选器(B[]b1)
都接受其参数中的数组类型参数,这些参数与int不匹配。因此,现在只剩下筛选器(对象o)
3。现在,int
将自动转换为包装对象整数
您可以在snifer(objecto)方法中进行验证
有关更多详细信息,请参阅此链接:
步骤如下-
谢谢你宝贵的回答。
o.getClass().getName();