2017-03-19 3 views
-1

2つのクラスを含むmyPackageパッケージがあります。最初に数値を取るpublicコンストラクタが2つあります。最初はintをとり、2番目のものはIntegerをとります。私が知っている限り、どちらも同じですが、そのうちの1つは基本的なタイプです。 他のクラスのオブジェクト参照を作成して実行すると、結果としてint値を取るコンストラクタが呼び出されます。 私の質問:この場合、どのコンストラクタが呼び出されるかはどのように決定されますか? P.P.申し訳ありませんが、この質問が簡単すぎる場合。私はちょうどJavaを学び始めています。両方が同じ種類(intと整数)の変数をとる場合にどのコンストラクタを使用するかをコンパイラが決定する方法

package myPackage 
public class myPackageClass{ 
public myPackageClass(int var){ 
    System.out.println("Constructor + int value["+var+"]"); 
} 
public myPackageClass(Integer var){ 
    System.out.println("Constructor + Integer value["+var+"]"); 
    } 
} 

テストファイル

package myPackage 
public class testClass{ 
public static void main(String ... arg){ 
    myPackageClass var2= new myPackageClass(1); 
    } 
    } 
} 

出力: "コンストラクタ+ int値[1]"

+0

質問は簡単です。答えはそうではありません。詳細は[JLS](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.9.3)にありますが、私は* reading *これは今です。経験則は次のとおりです。「より良い」(コンバージョン数の少ない)コンストラクタを選択します。 'new myPackageClass(Integer.valueOf(1))'を呼び出すと、Integerベースのものが選択されます。 (これは答えではありません。なぜなら、これは*メソッド*についての同様の質問の重複とみなすことができると思うからですが、良い方法を見つけることはできませんでした...) – Marco13

答えて

1

それらは正確に同じタイプのものではありません。 1はタイプintであるが、new Integer(1)Integerとなる。 new myPackageClass((Integer)1)new myPackageClass(Integer.valueOf(1))

+0

キャストするだけで十分かもしれません1〜整数 – vhula

+0

@rebelizant右のオプションの1つですが、私は自分の答えに他のオプションを追加しました。 – ctomek

0

まず、それは同じパラメータ(あなたのケースでmyPackageClass(int))と1つのコンストラクタの後にルックアップします:あなたはどうなるのであればnew myPackageClass(new Integer(1))出力ではなくintIntegerを渡すのConstructor + Integer value[1]

その他のオプションがあるだろう。

コンストラクタが見つからない場合はその後、その後、ボックス/ Unboxのパラメータを持つ1のルックアップします(myPackageClass(Integer)

現在のアルゴリズム見ることができます。int:あなたはこのような整数を作成した場合jls-15.12.2

-2

をi =新しい整数(1); 2番目のメソッドが呼び出されます。このInterger i = 1のような整数を作成すると、範囲が-128〜127の範囲内にある場合は、最初のメソッドが呼び出されます。それ以外の場合は、sencondがインボールされます。このA(1)のように直接コンストラクタを使用する場合は、最初のメソッドが呼び出されます

+1

範囲内の場合-128〜127->完全に偽 – efekctive

+0

私の間違い。私はそれを試していない。 Integer i = 1(-128〜127)のように1つのIntegerプロパティが定義されていれば、自動的にint型にアンパックされることを記事で見てきました。しかし、私はちょうど知っているテスト、それはこの意味では動作しません – bran

関連する問題