String s=""; と String s=null; の違い

 

“null”を辞書でひいてみると「価値のない」「ゼロの」という訳になっています。
プログラミングでは、nullと0(ゼロ)は(似てますが)別物です。

毎度、管理人イガジーです。

ある方から「String s=""; と String s=null; は同じですか?
違うなら何が違うのですか?」とのご質問を頂きました。
そうですね、分かりにくい話ですが、"" と null は別物です。

String などのオブジェクト型の変数には、実体(オブジェクト)の
存在場所を示す値(アドレス)が格納されます。

String s=""; と書くと、"" という長さゼロの文字列の実体(オブジェクト)が
メモリのある場所に確保され、s という変数にはその場所(アドレス)が
格納されます。

String s=null; と書くと、実体(オブジェクト)は生成されず、単に変数 s に
null が格納されます。ここで null とは何か?と疑問に思うかもしれませんが
null は null です。(ゼロではありません。)
意味的には「からっぽ」あるいは「実体無し」というニュアンスです。

public class NullisnotZero {
	NullisnotZero(){
		String s1="";
		String s2=null;
		if (s1==s2) System.out.println("equal");
		else System.out.println("not equal");
	}
	public static void main(String[] args) {
		new NullisnotZero();
	}
}

を実行すると、not equal と表示されます。
if (s1==0) と書くと、エラー(文字列と数値は型が違うので比較できない)
になります。
if (s1==null) と書くことはできます。

int など、プリミティブ型の変数では、オブジェクトは生成されずに
値がそのまま変数に格納されます。
その場合は逆に、nullを設定する事はできません。すなわち
int x=null; はエラー(nullをintに変換できない)になります。

お分かりいただけたでしょうか?

この他にも、疑問に思っている事やご意見、リクエストなどは
お気軽にメールフォームからご連絡ください。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。