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に変換できない)になります。
お分かりいただけたでしょうか?
この他にも、疑問に思っている事やご意見、リクエストなどは
お気軽にメールフォームからご連絡ください。
この記事へのコメントはこちら