ゆるゆるプログラミング

・null

nullは何も無いことを表す値で、その読み方は「ヌル」または「ナル」で、日本では「ヌル」と発音することが多いです。

具体的にはnullは、参照型のオブジェクトが初期化されていないことを表す値です。プリミティブ型nullを持つことができません。

それでは、以下のJavaのソースコードと実行結果を見てください。

NullSample1.java ← クリックしてダウンロードページに移動
001:    // 座標を格納するクラス
002:    class MyPoint {
003:    	int x, y;
004:    }
005:    
006:    
007:    public class NullSample1 {
008:    	public static void main( String[] args ) {
009:    		// MyPointの配列を5つ作成
010:    		MyPoint[] pnt;
011:    		pnt = new MyPoint[ 5 ];
012:    
013:    		// pnt[ n ]を表示
014:    		for ( int i = 0; i < pnt.length; i ++ )
015:    			System.out.println( "pnt[" + i + "]=" + pnt[ i ] );
016:    	}
017:    }

NullSample1の出力結果

pnt[0]=null
pnt[1]=null
pnt[2]=null
pnt[3]=null
pnt[4]=null

このプログラムでは、MyPointオブジェクトを格納するための配列を宣言しただけで、配列の要素にnewされたオブジェクトがないことを確認するものです。

この実行結果から、pnt[0]~pnt[4]がnullであることが確認できます。この状態では、MyPointオブジェクトのメンバ変数xとyに値を代入することはできません。

次のJavaのソースコードは、NullSample1.javaにMyPointオブジェクトの初期化(new)を追加したものです。

NullSample2.java ← クリックしてダウンロードページに移動
001:    // 座標を格納するクラス
002:    class MyPoint {
003:    	int x, y;
004:    }
005:    
006:    
007:    public class NullSample2 {
008:    
009:    	public static void main( String[] args ) {
010:    		// MyPointの配列を5つ作成
011:    		MyPoint[] pnt;
012:    		pnt = new MyPoint[ 5 ];
013:    
014:    		// 各オブジェクトを作成
015:    		for ( int i = 0; i < pnt.length; i ++ )
016:    			pnt[ i ] = new MyPoint();
017:    
018:    		// pnt[ n ]を表示
019:    		for ( int i = 0; i < pnt.length; i ++ )
020:    			System.out.println( "pnt[" + i + "]=" + pnt[ i ] );
021:    	}
022:    }

NullSample2の出力結果

pnt[0]=MyPoint@1909752
pnt[1]=MyPoint@1f96302
pnt[2]=MyPoint@14eac69
pnt[3]=MyPoint@a57993
pnt[4]=MyPoint@1b84c92

pnt[0]~pnt[4]がnullでなくなったことが確認できます。これでMyPointオブジェクトのメンバ変数xとyに値を代入する準備が整いました。

さらに、次のJavaのソースコードは、NullSample2.javaで作成したMyPointオブジェクトの値を代入するものです。

NullSample3.java ← クリックしてダウンロードページに移動
001:    // 座標を格納するクラス
002:    class MyPoint {
003:    	int x, y;
004:    }
005:    
006:    
007:    public class NullSample3 {
008:    
009:    	public static void main( String[] args ) {
010:    		// MyPointの配列を5つ作成
011:    		MyPoint[] pnt;
012:    		pnt = new MyPoint[ 5 ];
013:    
014:    		// 各オブジェクトを作成
015:    		for ( int i = 0; i < pnt.length; i ++ ) {
016:    			pnt[ i ] = new MyPoint();
017:    			// x,yに値を代入
018:    			pnt[ i ].x = i;
019:    			pnt[ i ].y = i * 2;
020:    		}
021:    
022:    		// pnt[ n ]のメンバ変数を表示
023:    		for ( int i = 0; i < pnt.length; i ++ ) {
024:    			System.out.println( "pnt[" + i + "].x=" + pnt[ i ].x );
025:    			System.out.println( "pnt[" + i + "].y=" + pnt[ i ].y );
026:    			System.out.println();
027:    		}
028:    	}
029:    }

NullSample3の出力結果

pnt[0].x=0
pnt[0].y=0
pnt[1].x=1
pnt[1].y=2
pnt[2].x=2
pnt[2].y=4
pnt[3].x=3
pnt[3].y=6
pnt[4].x=4
pnt[4].y=8

pnt[0]~pnt[4]のメンバ変数x,yに値が入っていることが確認できます。

■関連コンテンツ

変数について Javaで扱う変数について解説
配列 同じ型の変数をまとめた配列について解説
for文 繰り返し処理に使用するfor文について解説

■新着情報

2019.09.13 長さの単位変換 1マイル、1フィートは何m?
2019.09.06 クイックソート 高速に配列に並び替える方法
2019.09.05 中央値(メディアン) 配列に格納されている値の中央値を求める
2019.09.05 最頻値 配列から出現回数が最も多い値の取得
2019.09.03 配列値の反転 配列の反転処理
2019.08.05 トランプの操作 トランプを操作するクラス

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ