0

以下の例では、int7がオブジェクトと見なされる方法がわかりません。

sifer(7)は、メソッドsifer(Object o)と見なされます。私はこれがどのように起こったのか理解できません。私のJavaリファレンスブックの1つでは、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);  


}  

}

4

4 に答える 4

3

メソッドがないためsifer(int)、コンパイラは「最も近いもの」を見つけようとします。この場合、他の2つのsiferメソッドは配列をパラメーターとして受け取りますが、intは明らかにそうではありません。

最後のメソッドはsifer(Object)、を含むすべてのオブジェクトに適用できます。Integerこれは、に使用されるメソッドですsifer(7)

現実はもう少し複雑で、JVMは次の順序で一致するmathodを探します。

  • ID変換
    • あなたの場合:sifer(int)しかし、そのような方法はありません
  • 拡大するプリミティブ変換
    • あなたの場合:sifer(long)例えば、しかしそのような方法はありません
  • 拡大参照変換
    • あなたの場合:該当なし、intはオブジェクトではありません
  • ボクシングの変換とそれに続く拡張参照変換
    • あなたの場合、それが起こっていることです:intはオブジェクトに拡張された整数にボックス化されます
  • 開開変換とそれに続く拡張プリミティブ変換
    • あなたの場合:該当なし
于 2012-07-14T06:54:04.367 に答える
1

1.上記のコードは、メソッドのオーバーロードの典型的な例であり、Java 1.5で提供されたAutoBoxingとAuto-UnBoxingとともに、手動のBoxingとUnboxingが苦痛でした。

2. The sifer(A[]... a2)両方ともsifer(B[] b1)、そのパラメーターで配列型引数を受け入れます。これは、intと一致する方法はありません。だから今、私たちは。だけが残っていsifer(Object o)ます。

3.これで、が自動的intに変換されます。Wrapper Object Integer

snifer(Object o)メソッドでこれを行うことで確認できます。

    o.getClass().getName();

詳細については、次のリンクを参照してください。

http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

于 2012-07-14T07:10:14.307 に答える
0

7オートボックス化IntegerれますObject

も参照してください

于 2012-07-14T06:50:49.900 に答える
0

以下の手順-

  1. int(7)は整数にボックス化されました。
  2. 整数参照はオブジェクトに拡張されました(整数はオブジェクトを拡張するため)。
  3. sifer()メソッドは、実際にIntegerオブジェクトを参照するObject参照を取得しました。
于 2012-07-14T07:30:55.527 に答える