なぜ、NullPointerExceptionが発生してデフォルト値のJava整数の結果を使用していますか?
-
19-09-2019 - |
質問
私は、Javaに新しいです。私はJavaでそのクラス変数はデフォルト値を持って読んでます。
私は、次のプログラムを試してみましたが、整数のデフォルト値である0
として出力し、取得するために期待していたが、私はNullPointerException
を取得します。
私は何をしないのですか?
class Test{
static Integer iVar;
public static void main(String...args) {
System.out.println(iVar.intValue());
}
}
解決
あなたは正しいです、Javaで初期化されていないクラス変数は、それらに割り当てられたデフォルト値を持っています。 JavaでInteger
タイプはint
と同じではありません。 Integer
は、オブジェクト内のプリミティブ型int
の値をラップするラッパークラスです。
あなたのケースではiVar
はinitiliazedされていないInteger
オブジェクトへの参照です。初期化されていない参照はnull
のデフォルト値を取得し、あなたがnull参照の上intValue
()メソッドを適用しようとすると、NullPointerException
を取得します。
この問題を完全に回避するために、あなたの参照変数としてInteger
オブジェクトを参照するようにする必要があり
class Test {
// now iVar1 refers to an integer object which wraps int 0.
static Integer iVar1 = new Integer(0);
// uninitialized int variable iVar2 gets the default value of 0.
static int iVar2;
public static void main(String...args) {
System.out.println(iVar1.intValue()); // prints 0.
System.out.println(iVar2); // prints 0.
}
}
他のヒント
これはiVar
がnullであることを意味します。 Javaでは、あなたがnull参照のメソッドを呼び出すことはできません、それはあなたが見ているNullPointerExceptionが発生します。
private Integer amount=Integer.valueOf(0);
private Integer points=Integer.valueOf(0);
特に、なぜあなたは、代わりに新しい整数(int型)のInteger.valueOf(int)
を使用する必要があります。CACHING
valueOf
のこの変異体は、(それが既にJDK 1.4以降のブールでの些細な場合には存在していた)Byte、Short、Integer、およびLongにJDK 5で追加されました。これらのすべては、もちろん、Javaで不変オブジェクトです。あなたはint型からIntegerオブジェクトを必要に応じて、あなたは新しい整数を構築したいことをするために使用します。整数(0)ブランドの新しい、同一のIntegerオブジェクトにオブジェクトの構築を無駄にするのではなく、毎回オブジェクトと同じ正確な整数を今-128から127の間でIntegerオブジェクトをキャッシュバックあなたを渡すことができるので、しかし、JDKで5+、あなたは本当にのvalueOfを使用する必要があります