- ベストアンサー
nullについて
public class Test0 { public static void main(String[] args) { String str="x"; str=null; if(((Object)str).equals(null)) { System.out.println("ok"); } else { System.out.println("out"); } } } を実行するとエラーになります str=null; をコメントアウトするとエラーでなくなります クラスオブジェクトがnullに等しいかどうか をするときにたとえそのオブジェクトがnullであっても エラーにならないようにするにはどうしたらいいのでしょうか? (tryは使用しない方法でおねがいします) また String x; とした直後にxはnullなのでしょうか? String以外に一般のクラスについてもお願いします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
public class Test { public static void main(String[] args) { String str = ""; if( str == null ) { System.out.println("ok"); } else { System.out.println("out"); } } } nullかどうかのチェックはstr == nullでチェックしてください。 str = nullとすると、参照する実体が無いわけですからメソッドの呼び出しに失敗します。 >String x; >とした直後にxはnullなのでしょうか? 私の環境(build 1.5.0_06-b05)で試そうとしましたが String str; if( str == null )は 「変数 str は初期化されていない可能性があります。」 というコンパイルエラーになりました。
その他の回答 (3)
- rinkun
- ベストアンサー率44% (706/1571)
まず、オブジェクトがnullでも使える比較は例えば次のようにします。 if (str==null || str.equals("")) { // strがnullあるいは""のとき } else { // それ以外 } > String x; > とした直後にxはnullなのでしょうか? Javaでは宣言だけして初期化していない場合は値がないとされ、代入前に参照するとコンパイルエラーとなります。 実行時にどの分岐パスを通っても参照前に確実に初期化されることがコンパイラに分かるようなコードを書かなければいけません。 > str = null; > 駄目だということですが > これはガーベッジコレクションを呼ぶために使えるのではないでしょうか? それ以上参照しない変数にnullを代入するのは確かにガーベージコレクタにオブジェクトが不要になったことを伝える一つの手段ではあります。ただ即座にガーベージコレクションが実行されるわけではないので誤解のないように。
お礼
ありがとうございます
- tom11
- ベストアンサー率53% (134/251)
こんにちは、 外しているかもしれませんが、 String で、null と "" は、使い分けないといけないみたいです。 String sample = "x"; if ((sample == null) || (sample.equals(""))) { System.out.println("空白"); }else{ System.out.println(sample); } sampleにnull 又は ""の時、空白を出力します。 sample.equals(null)は、駄目なようです。
お礼
ありがとうございます
- sha-girl
- ベストアンサー率52% (430/816)
比較はif(str=null)ではありません。if(str==null)です。 str=nullは代入を表し必ず真になります。(つまりelse部分は実行されません。) >これはガーベッジコレクションを呼ぶために使えるのではないでしょうか? 基本的にガベージコレクションというのは オブジェクト毎に参照数をみて廃棄するかどうかというのをみると思いますが nullとする事で参照カウンタがデクリメントされるかどうかは知りません。 もしJavaでのメモリーリークを 心配しての補足要求なら別途「弱参照」で調べてみると良いでしょう。 http://www-06.ibm.com/jp/developerworks/java/051209/j_j-jtp11225.shtml
お礼
ありがとうございます if(str=null)はif(str==null)の写し間違いでした 実際にはif(str==null)でやっていました
お礼
ありがとうございます やってみました public class Test0 { public static void main(String[] args) { String str="x"; str=null; if(str=null) { System.out.println("ok"); } else { System.out.println("out"); } } } の結果はok public class Test0 { public static void main(String[] args) { String str="x"; //str=null; if(str=null) { System.out.println("ok"); } else { System.out.println("out"); } } } の結果はoutです つまり String str; の直後strはnullではないのですね String str; str=null; としてはじめてstrはnullになるようです たぶん任意のクラスオブジェクトでもそうでしょうね
補足
ありがとうございます 今は出勤前会社で確認してみます str = null; 駄目だということですが これはガーベッジコレクションを呼ぶために使えるのではないでしょうか? よろしくお願いします