• ベストアンサー

(Java) == と equals について

Javaで、 「もしtestという参照型変数がnullだったら○○する」 というIF文を書きたい場合は、 下記ABどちらの方法が正しいのでしょうか? (判定したい内容によっても異なるかも知れませんが。) ■パターンA Test test = null; if (test.equals(null)) { //TODO } ■パターンB Test test = null; if (test == null) { //TODO } よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

実際にコードを実行してみると判るかと思います。「どちらの方法が正しい」以前の問題となります。 パターンAですと、nullであるオブジェクトtestに対しequalsメソッドを呼び出そうとするので、判定時に例外(NullPointerException)が発生してしまいます。ですので、パターンBしか選択肢はありません。

その他の回答 (1)

noname#158634
noname#158634
回答No.1

もしtestがNullだった場合、一方はNullPointerExceptionとなるはずですが。

関連するQ&A

  • equalsと==について

    今まで、equalsは主に文字列の比較、==はプリミティブ型の比較と言うことで仕事で使っておりました。 しかし、文字列も==が使えることがわかりました。 String a = "aaa"; String b = "aaa"; という変数がある場合、今までは if(a.equals(b))とやっておりました。(と教わりました) が、if(a==b)でも同一の結果が得られることがわかりました。 実際、Stringクラスのソースを見ると、最初に==かどうかをif文を使って判定してます。 具体的にどう違うのか、ご存知の方教えてください。 また、どちらが良いのかも教えてください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • equalsの逆

    javaで、文字列の場合は比較演算子の「==」は用いずに if ((str1.getText()).equals(str2)){ (※…str1,2は文字列) と書きますよね? この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

    • ベストアンサー
    • Java
  • equals("A") ?false : true

    質問します。 次の内容のjavaプログラムを見かけました。 if (args[0].equals("A") ? false : true) { この「? false : true」の意味がわかる方、教えてもらえますか? よろしくお願いします。

    • ベストアンサー
    • Java
  • equals() を使って、変数に入っている文字列を比較

    いつも大変お世話になっております。 下記のように、変数に入った値によって条件分岐をしたいのですが、 うまくいきません・・。 どのように書くべきでしょうか。  変数aaaに入っている値がnaninaniだったら”~~~”と処理したいのですが。 if(aaa.equals("naninani")){ ~~~省略~~~ } 何卒、初心者なので途方もない質問かもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Java
  • (o==null ? get(i)==null : o.equals(get(i))) の意味

    すみません、以下の式を わかりやすく解説していただけないでしょうか・・ for文で使用する式なのでしょうか? Java暦はまだ浅いので、 以下のような複雑な式は初めて見ました。 また、「:」や「?」の意味が分からないのですが・・。 (o==null ? get(i)==null : o.equals(get(i)))

  • コマンドプロンプトの文字列判定

    windowsのコマンドプロンプトで悩んでいます。 ifコマンドを用いて 変数の中に文字が入っている→通常の処理 変数の中に文字が入っていない→エラー処理 としたいんですがうまくいきません。 if not %test:~1,1% == a :goto error ↑のテスト文ではtestの中の1文字進んだ所にaが入っているか判定しています 同じようにしてaの部分をNULLにするにはどう指定したらいいでしょうか? 宜しくお願いします。

  • javaを用いて,a列,b列の空白数を数えたい.

    javaを使って,a列,b列の空白数を数えるプログラムを教えてください. 自分なりに色々と考えてみましたが全くわかりません… おカぞえ,どうぞよろしくお願いいたします. 初心者のため,具体的に教えていただけるとありがたいです. 以下に途中まで考えたコードを添付いたします. 自分としましては,空白に-9を代入し,後でそれを数えるというような方法を考えました. import java.io.*; import java.util.*; public class PTMain { public static void main(String[] args) { try{ BufferedReader fin = new BufferedReader(new FileReader("test.csv")); String ss ; String a; String b; fin.readLine(); while((ss=fin.readLine())!=null){ StringTokenizer st =new StringTokenizer(ss,","); a = st.nextToken(); b = st.nextToken(); if (a.equals(null)){ a="-9" ; //もし空白があるなら-9を代入したい } if (b.equals(null)){ b="-9" ; } System.out.println("a = " + a); System.out.println("b = " + b); } } } } /* test.csv a,b,c,d 5,6,3, 4,,8,1 ,6,7, 5,7,8,8 9,1,45,1 6,6,, ,1,8,5 5,4,5, */

  • java初心者です。基本的ですがよろしくおねがいします◎

    下記の内容でコンパイル時にエラーが出てしまいます。 ■問題■要素数10の配列を任意のデータで初期化し、最大値と最小値を求めよ。 import java.io.*; class Ensyu4 {    public static void main(String args[])     {    int i=0,max=0,min=0;//カウンタ、最大値変数、最小値変数         int[10] intArray = {5, 6, 7, 8, 9, 10, 1, 2, 3, 4}; //配列任意初期化         max = intArray[0];         min = intArray[0];         for(i=0;i<10;i++)//最大・最小判定         {             if(max<intArray[i])                 max = intArray[i];             if(min>intArray[i])                 min = intArray[i];         }     System.out.println(max + "が最大値です");     System.out.println(min + "が最小値です");     } } エラーの内容・・・ Ensyu4.java:9: ']' がありません。 int[10] intArray = {5, 6, 7, 8, 9, 10, 1, 2, 3, 4}; //配列任意初 期化 ^ Ensyu4.java:9: 文ではありません。 int[10] intArray = {5, 6, 7, 8, 9, 10, 1, 2, 3, 4}; //配列任意初 期化 ・・・どうやら配列の初期化の仕方が間違っているようなのですが、何が間違っているかわかりません。きっと基本的な間違いなのでしょうが・・・^^; 下記のサイトを参考にさせていただいています◎ http://www.javaroad.jp/java_array1.htm なにとぞご協力お願いいたします^^;

    • ベストアンサー
    • Java
  • iアプリのstar言語の質問です。

    iアプリのstar言語 (Java拡張言語) の質問です。 if文の条件式に『対象の変数の値がint型なら』という式の書き方を教えてください。 色々調べて試しましたが全部だめでした。 他にiアプリのstarに対応した方法があれば教えてください。 【試した事】 『変数 == 比較対象』を使って比較 『変数.equals(比較対象)メソッド』を使って比較 『変数 instanceof 参照型のクラス』を使って比較 『変数.getClass().getName() == 比較対象』を使って、名前として比較 ------------------------- 【実験内容と結果】 int num = 1; という変数があるのを前提としています。 ------------------------- ■『変数 == 比較対象』を使って比較 if(num == int) ↓エラーメッセージ↓ '.class' がありません。 if(num == int){ ^ ------------------------- ■『変数.equals(比較対象)メソッド』を使って比較 if(num.equals(int)) ↓エラーメッセージ↓ '.class' がありません。 if(num.equals(int)){ ^ ------------------------- ■『変数 instanceof 参照型のクラス』を使って比較 if(num instanceof int) ↓エラーメッセージ↓ 予期しない型 検出値 : int 期待値 : 参照 if(num instanceof int){ ^ 予期しない型 検出値 : int 期待値 : クラスまたは配列 if(num instanceof int){ ^ ------------------------- ■『変数.getClass().getName() == 比較対象』を使って、名前として比較 if(num.getClass().getName() == "int") ↓エラーメッセージ↓ int は間接参照できません。 if(num.getClass().getName() == "int"){ ^ ------------------------- 検証の結果、『int』はプリミティブ型であり、クラスでは無いので比較対象として成立しない、という事らしいです。 つまり、プリミティブ型の値が代入された変数の型を検出する方法が知りたいのです。 よろしくおねがいします。

    • ベストアンサー
    • Java
  • matchesを否定文として使う方法(Java)

    Java実行時の引数として渡された値を元に、 「もし引数が0~9の値“ではない”場合は」というif文を作成したいのですが、 下記の記述だと、引数の最初の文字しか判定されていないようです。 if (args[0].matches("[^0-9]+") 引数の全ての文字が「0~9の値“ではない”」とするには、 どのように指定すれば宜しいでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう