2016-06-29 21 views
-1

Javaでオートボクシングとアンボックスを使用しています。 Autoboxingの戻り値の型は問題ありません。問題ありません。 unboxingの場合、戻り値の型はintではなくIntegerとして返されます。私は以下のコーディング見つけてくださいと私は喜ば教えてくださいアンボックス化を実行するときに戻り値の型がintとして返されない

package JavaLearning; 

public class NumberLearning { 

    public static void main(String[] args) { 

     Integer x=5;         // AutoBoxing 

     System.out.println(x.getClass().getName());  // Display the type with the package name 

     System.out.println(x);       

     x=x+5;           // Unboxing 

     System.out.println(x.getClass().getName());  // Display the type with the package name 

     System.out.println(x); 

    } 

} 

出力:

java.lang.Integer 
5 
java.lang.Integer 
10 
+0

@CSKすみません。 –

+0

何が問題なのですか?私は理解しているかわからない、あなたは自分に答えているようだ:オートボクシングはここで遊ぶメカニズムである。 – Tunaki

+0

あなたはxがIntegerオブジェクトであるとしますが、それはなぜそれがintであると思うのですか – CSK

答えて

0

あなたの問題はInteger xがオブジェクト参照を保持し、原始的に割り当てられることはありませんということです。

これは、対応する プリミティブ(int型)値はアンボクシングと呼ばれるにラッパー型(整数)のオブジェクトを変換

int newX = x + 5; 

あなたに適切なアンボクシングを与える必要があります。 対応するプリミティブ型の値を期待するメソッドにパラメータとして渡さ

  • :ラッパークラスのオブジェクトである場合、Javaコンパイラは アンボクシングを適用します。
  • 対応するプリミティブタイプの の変数に割り当てられます。

Source

1

あなたはIntegerあるxx+5の結果を格納しているので、ボクシングが再び発生するので、それはIntegerとして来ています。そのタイプを表示するには

は、それがintにアンボクシングだとあなたがプリミティブ型のメソッドを呼び出すことができないので、あなたが直接表現x+5の種類を印刷する必要がありますが、あなたはそれを行うことはできませんintです。

0

まず、変数の型は固定されています。あなたの例では、xのタイプはjava.lang.Integerであり、intに変更することはできません。

あなたが行っているテストは無効です。 xのタイプがjava.lang.Integer以外のものに変更されることはありません。あなたがx = x + 5;を行うと

、物事の後、数が起こっている:

  1. x=の右側には、int
  2. の結果を加算した値5箱なしです+操作はIntegerに再度ボックスされ、x
に割り当てられます
1

変数xIntegerと宣言されています。したがって、x = x + 5;という行には、自動的にリボックスされます。それを避けるには、int y = x + 5;を使用してください。しかし、プリミティブ型で.getClass()と呼ぶことはできません。

+0

Thanks dude。今私は間違いを犯したところでそれを手に入れました。みんなに感謝 – Ashok

関連する問題