• ベストアンサー

Javaの文字列比較

guppy_iの回答

  • guppy_i
  • ベストアンサー率50% (1/2)
回答No.1

「==」は、メモリ上のアドレスが等しいかどうかを判定します。 「moji」と「hikaku」に格納した文字列そのものが同じでも、 別々のメモリを確保して文字列を置いているため、「==」では よろしくないということになります。 一方、Stringのメソッド「equals」は、文字列そのものが同じで あるかどうかを判定します。 ちなみに、「moji == hikaku」を実行すると、trueが返ります。 これは、javaが気を利かせてそうなっているだけなので、 (それならいいじゃんと言われそうですが(^^;) オブジェクトの 比較は「equals」メソッドを使ってする癖をつけた方が良いです。 他のクラスをバリバリ使っていくようになると、違いが明確に 理解できるようになると思います。 他のクラス(Vector)での例 import java.util.Vector; public class Test { public static void main(String[] args) { Vector a = new Vector(); Vector b = new Vector(); Object o = new Object(); a.add(o); b.add(o); System.out.println(a == b); // falseと表示されます。 System.out.println(a.equals(b)); // trueと表示されます。 } }

関連するQ&A

  • 文字列の比較

    StringBufferオブジェクトの文字列を比較するときは、どのメソッドを使用すればいいのですか? equalsメソッドは同じオブジェクトかどうかを比較するだけなので使えません。

    • ベストアンサー
    • Java
  • オブジェクトの比較と文字列の比較の違い

    今、基本情報技術者の勉強でJavaを勉強しているのですが、持っているテキストの問題で分からないものがありました。 String str1 = "Hello."; String str2 = "Good, Bye."; String str3 = str1; String str4 = str1 + str2; とすると、 (A)str1 == str2; がfalse (B)str1.equals(str3); がtrue というのは分かるのですが、 (C)str4 == "Hello.Good, bye."; がなぜfalseになるのでしょうか? ==はオブジェクトの比較で、equlasは文字列の比較だと書いているのですが、よく違いが分かりません。 また、 上の4つの処理の後に str3 = "test"; という処理を行っているのですが、このときの状況は、 str1はHello.のままで、 str3のみがtestになっている、と理解したのですがそれで合っているのでしょうか?

    • ベストアンサー
    • Java
  • Javaの文字列の大小比較についてです。

    Javaでは、文字列の大小比較をする時、StringのcompareToを使用しまが… compareToの中の処理は一旦char型に直して、それを比較しているのでしょうか? また、compareToを使用せずに、プログラム内に自分で書いた場合、処理速度は変化ありますか?

    • ベストアンサー
    • Java
  • バイナリ文字列の比較について

    テキストをバイナリで読み込んで文字列を比較する際に 下記のロジックだと2バイトずつ読み込んで比較していくのですが 比較したい文字列が"He"だと合致するのですが1バイトずれの "el"だと合致しません。 ストリーム内の任意の文字列を判定したいときはどのように修正すればよいでしょうか? ----sample.txt--- Hello World!! ---------------- byte[] buf = new byte[2]; FileInputStream in = new FileInputStream("sample.txt"); int b; while ((b = in.read(buf)) != -1) { if ("He".equals(new String(buf))) { System.out.println("HelloのHeはOK"); } if ("el".equals(new String(buf))) { System.out.println("HelloのelはNG"); } }

    • ベストアンサー
    • Java
  • C言語 文字列の比較 compare

    プログラミング初心者です。 60文字以内の文字列を入力して、 大小関係を比較・表示するプログラムなのですが・・ 「AはBより大きい」という結果しか出ません。 どこが間違っているのか、ご指摘お願いしますっ。 #include<stdio.h> int main(void) { char moji1[61]; char moji2[61]; printf("文字列Aを入力===>"); scanf("%60s" ,&moji1); printf("文字列Bを入力===>"); scanf("%60s" ,&moji2); if(moji1-moji2>0){ printf("===AはBより大きい===\n"); } else if(moji1-moji2<0){ printf("===AはBより小さい===\n"); } else if(moji1-moji2==0){ printf("===AとBは等しい===\n"); } return 0; } int compare(char *x, char*y) { while(*x==*y){ if(*x=='\0') return 0; x++; y++; } return (*x-*y); }

  • 文字列の配列の比較

    こんにちは。タイトルどおり簡単な質問なのですが、どうしても確認したいのでお願いします。 とあるメソッドで、2次元配列の中にいくつか大文字のOが入ってるのですが、与えられた配列にOがあればtrueを返し、なければfalseを返します。 public boolean cellAt(int row, int col){ if(space[row][col].equals("O")) return true; else return false; } rowとcolはテストメソッドから値を受け取ります。 これでプログラム自体は動くのですが、WebCatという自動的に採点するものがあるのですが、それによるとエラーがでてしまいます・・・。 どこが違うのかは教えてくれないのですが・・・。 上で間違っているとすれば、文字列の比較くらいしかないんじゃないかと思うのですが、 space[row][col].equals("O") これで比較できますよね? 他のを調べて、if (Arrays.equals(space[row][col], "O"))これを試してもみたのですが、赤線が出てしまって無理でした。 どなたか宜しくお願いします。

  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java
  • Cに慣れてしまった人、どのようにJAVAを克服しましたか?

    JAVAについて質問です。 私はC言語をこの1年間勉強してきました。 そしてC言語のコーディングの仕方に慣れきってしまったせいか、どうしてもJAVAのオブジェクト指向 というものが理解できません。 コーディングも上手くいきません。 クラスやメソッドやインスタンスがどうとかコンストラクタが・・・などの横文字が全然意味が分かりません。 C言語で言うとどれがどこに当たるのか!? とかいう風に置き換えて考えようとしても上手く行きません。 こういう、横文字が理解できて、オブジェクト指向の考え方に慣れる為にはどのようにしたらいいでしょうか? また、C言語からプログラミングに入って、後からJAVAを勉強する場合、どのような点に気をつければ良いでしょうか? また、JAVAの克服法を教えてください。

    • ベストアンサー
    • Java
  • 文字列比較がどうしてもできません。

    いつもお世話になっております。 現在、Perlの練習を兼ねてCGIによる簡単なスクリプトを作っています。 内容としては、フォームに入力された値を、『name.log』ファイルに書いてある値(名前一覧)を参照して、『hikaku.cgi』で比較し、 一致しなければ、『hikaku.cgi』が「名前がありません」という言葉を返す、というものです。 一応、505エラー等は起きていないのですが、どうしても文字列同士の比較ができないので、投稿しました。 各ファイルはこのような内容です。 『name.log』(604) takeshi masako-nisimura teru009 ....以下、10種ほど似たような物 『hikaku.cgi』(705) #! /usr/local/bin/perl $file = 'name.log'; $sain = 0; #フォームから値を取得する部分(省略) $ck = $FORM{'namae'}; open(DB,$file); @HIKAKU2 = <DB>; close(DB); print "Content-type: text/plain\n\n"; foreach $i (@HIKAKU2) { if($i eq $ck) { $sain++; } } if ($sain != 1) { print "名前がありません"; } __END__ こちらの考えでは、name.logの中で同じ名前はないので、$sainには1しか入らず、 したがって、名前がなかった場合は「名前がありません」が表示されるはずなのですが、どうもそれがうまく動きません。 一応、$sainとフォームデータの$ckがどうなっているか、printで表示させてみたのですが、 $sainは0、$ckは入力したフォームの値がきちんと反映されていました。 初心者ですので、間違ったところが多々あると思いますが、どなたか回答いただけると幸いです。

    • ベストアンサー
    • CGI
  • Javaにおけるオブジェクト指向とは?

    現在Javaを勉強しております。 以前はC言語を勉強しておたのですが、 JavaとCの違いにおいてJavaの特徴としてオブジェクト指向と習いました。 しかしいまいちこのオブジェクト指向を理解できません。 プログラムを一つのまとまりとして考えるというのはどういうことなのでしょうか? 確かにJavaはC言語とは違いいくつかのプログラムからできている (はず?見当違いだったらすみません) C言語が一つの大きなプログラムでできているとすると、 Javaは細かいプログラムの集合体であると私は考えていました。 この細かいプログラムの集合体というのがオブジェクト指向なのでしょうか? 全くの見当違いだったらすみません。 よろしくお願いします。 

    • ベストアンサー
    • Java