需要了解核心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)方法中进行验证

有关更多详细信息,请参阅此链接:

步骤如下-

  • 整数(7)被装箱为整数
  • 整数引用已扩展到对象(因为整数扩展了对象)
  • sifer()方法获得了一个实际引用整数的对象引用 反对
  • 步骤如下-

  • 整数(7)被装箱为整数
  • 整数引用已扩展到对象(因为整数扩展了对象)
  • sifer()方法获得了一个实际引用整数的对象引用 反对

  • 谢谢你宝贵的回答。
        o.getClass().getName();