- ベストアンサー
文字列比較に 比較演算子(==)が・・・・
現在、Webアプリの保守にたずさわっています 文字列比較に 比較演算子(==)が使用されている事を発見 問題なく動いている様子・・・(動いちゃうものなのですね!!) でもって調べてみたのですが、なんとか動くが保障されないような事が書かれていたので、改修を行う予定です。 が・・調査対象がなにぶん5万ステップもある為、途方にくれています。 お助けツールか、何か良い調査方法はないものでしょうか? よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
確か以前、ニュースでそういうツールの記事を読んだ覚えがあるなぁと思って探してみました。 確かこれだったと思います。 FindBugs http://journal.mycom.co.jp/articles/2006/09/23/findbugs1/ 確か、Stringを==で比較している場合の警告もしてくれるはずです。 ただ、私は使ったことないので、どこまで使えるのかは、自信はありません。 使うなら、ご自身でよく調べてからにしたほうがよいと思います。
その他の回答 (3)
- yokkou
- ベストアンサー率30% (34/111)
eclipseという総合開発環境?がありますが、 確かあれでは文字列の比較を「==」で実行していると警告が出たと思います 不要なimportなども教えてくれるので、試してみては如何でしょうか?
お礼
回答ありがとうございます。 eclipseを使用してみたのですが、 残念ながら、javaコンパイラーのエラー・警告設定で、文字列の比較を「==」での警告設定は、ありませんでした。
- SN1701
- ベストアンサー率76% (16/21)
普通,よほど条件がそろっていないと,動いてしまうことはないと思います. でも,ちゃんと動いているという話なので,こういう可能性もあるという話をあげておきます. もしも,その比較している文字列が,java.lang.Stringのinternメソッドによって得られた正準表現であるという前提があるなら == で比較しても問題ありません. http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/String.html#intern() 同じ理由で,文字列リテラルのみを比較している場合も動作するでしょう. もちろん,単に考えなしに == で比較してしまっているだけの可能性もあるわけですが,その辺は前後のコードもちゃんと読まないとわからないでしょう.
お礼
なんとなく動いてしまっている理由は下記サイトで理解する事が出来ました。 http://www.nextindex.net/java/String.html 単体テストでNGにならなかったのは、たまたま条件がよかっただけのようです。 たぶん製作者は、SN1701さんにご回答頂いたような事まで、意識しているものではなく、ただ単純なコーディングミスだと思われます。 今回の件では、ある意味とても勉強になりました。 私自身JAVAの文字列比較は教えられたままに(equals)を使っていただけなのですが、String オブジェクトについて理解が深まりました。 回答ありがとうございました。
5万ステップ程度なら検索・置換で検索結果が色つきになるテキストエディタとかを使って追ってくしかないんじゃないかな。 どの == にも前後に規則性があるなら正規表現検索で更に楽になると思うけど・・・純粋に数値比較でも使われているだろうから何とも
お礼
やっぱりすべての==を、確かめていくしかないですかね・・・ 何かあっと驚く、夢見たいな方法を知っている方がいらっしゃらないか、着手する前に書き込んで見たのですが・・・ コンパイラー君も、「想定している型と違うよ」ってな具合に警告でも出してくれれば・・・ とりあえず、もう少し先輩諸氏の回答を待ってから着手したいと思います。 回答ありがとうございました。
お礼
ありがとうございます 感謝感激です。 こんなツールを探していました!! 早速、試してみます。 やっぱり書き込んでみてよかった!! PecoPlusさんありがとうございました。