2017-08-20 3 views
-2
package Sample; 
public class Sample4Array { 
public static void main(String[] args) { 
    int a[] = new int[10]; 
    System.out.println(a[1]); 

    for(int i=0;i<a.length;i++) { 
     System.out.println(a[i]); 
     //default value is 0 
    } 

    Integer x[] = new Integer[10]; 

    for(int i=0;i<x.length;i++) { 
     System.out.println(x[i]); 
     //default value is null & not throwing an exception. 
    }  
} 
} 

注意してください。最初のforループはデフォルト値として0を返します。& forループはそのデフォルト値もnullですし、例外もスローされません。オブジェクト型のNull Pointer例外を送出していません。デフォルト値はNULLです。

答えて

4

参照変数(オブジェクト)を宣言すると、実際にオブジェクトへのポインタが作成されます。変数xはint型で、Javaがあなたのために0に初期化されます。この例では

int x; 
x = 10; 

:あなたは、プリミティブ型intの変数を宣言し、次のコードを考えてみましょう。 2行目に10に割り当てると、xが指すメモリ位置に値10が書き込まれます。

しかし、参照型を宣言しようとすると、何か別のことが起こります。それはプリミティブな値が含まれていない、

Integer num; 
num = new Integer(10); 

最初の行は、NUMという名前の変数を宣言していますが、次のコードを取ります。代わりにポインタが含まれています(型がInteger型で参照型です)。あなたがまだJavaを指し示すものは何も言わなかったので、「何も指していない」という意味でnullに設定されています。

2行目では、newキーワードを使用してInteger型のオブジェクトをインスタンス化(または作成)し、ポインタ変数numをこのオブジェクトに割り当てます。 dereferencing operatorを使用してオブジェクトを参照できるようになりました。 (点)。

あなたが変数を宣言したが、オブジェクトを作成しなかったときに発生した例外が発生しました。オブジェクトを作成する前にnumを逆参照しようとすると、NullPointerExceptionとなります。ほとんどの場合、コンパイラは問題をキャッチし、 "numは初期化されていない可能性があります"が、オブジェクトを直接作成しないコードを書くことがあることを知らせます。

2

投げられると予想される例外はどれですか? NullpointerException? null参照のメソッド/変数にアクセスしようとしていないため、この例外はスローされません。

あなたが見ているのは完全に正常です。

0

System.out.println(x[i]);が内部でその文字列表現を取得するためにx[i]String.valueOf()を使用するので、任意のNullPointerExceptionがあって文句を言いません。

public void println(Object x) { 
    String s = String.valueOf(x); 
    synchronized (this) { 
     print(s); 
     newLine(); 
    } 
} 

String.valueOf()入ってくるオブジェクトがnullで、そうならば、それはその値として文字列nullを使用している場合、内部でチェックします。以下を参照してください:

public static String valueOf(Object obj) { 
    return (obj == null) ? "null" : obj.toString(); 
} 
0

Exceptionを投げていません。ヌルポインタを間接参照しようとしていません。 Integerオブジェクトに設定されているデフォルト値はnullです。単にnullの値を印刷しています。しかし、nullの値を逆参照しようとすると、エラーが発生します。

あなただけのこの操作を行う場合は、次の

Integer[] x; 

変数xがnull値にを指しです。あなたが逆参照しようとすると、今すぐエラーになります。WILL

瞬間、あなたは何:

x = new Integer[10]; 

メモリがnew演算子を使用して、それに割り当てられています。それはもはやnullを指していません。したがって、あなたはNullPointerExceptionを取得しません。

0

あなたはこのint a[] = new int[10];ようなint型(プリミティブ)の配列を作成するとき、配列は0

のデフォルト値を使用して作成されていて、このInteger x[] = new Integer[10];のように整数(オブジェクト)の配列を構築する際に、配列を使用して作成されているのでどの要素にもアクセスしようとするとnullになります(ヌルは値)

しかし、戻り値に対して何らかの操作を実行しようとすると、NULLポインタ例外が発生します

x[i].intValue(); //this will give you java.lang.NullPointerException 
  • オブジェクトを保持するもののデフォルト値はnullです。
  • ブール値のデフォルトはfalseです。
  • ヌル文字 '\ u0000'(小数点以下は
    相当)がcharである場合のデフォルトです。
  • int型/ショート/バイト/長期のデフォルトそれはフロートのための0
  • デフォルト/ダブルそれは0.0
です
関連する問題