- - PR -
equalsメソッドについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-23 13:09
equalsメソッドを用いて下記のようなサンプルを作成してみました。
期待した結果としては"同じ"という文字がコンソールに表示されると思ったのですが 出ませんでした。Stringクラスのequalsは「同じ文字シーケンスを表す Stringオブジェクトである場合にだけ、結果は true」とありますので オブジェクト同士を比較するのではなくオブジェクトの中身を比較していると 思ったのですがそうではないのでしょうか?
[ メッセージ編集済み 編集者: かんたろう 編集日時 2005-07-23 13:11 ] | ||||||||
|
投稿日時: 2005-07-23 13:11
> if(s3.equals("s4")){
よーく見てみてください。 | ||||||||
|
投稿日時: 2005-07-23 13:13
>オブジェクト同士を比較するのではなくオブジェクトの中身を比較していると
>思ったのですがそうではないのでしょうか? ご認識の通りです。 ただ・・・・、 "abc" と "s4" を比較していますので結果は false が返りますね。 | ||||||||
|
投稿日時: 2005-07-23 13:25
すみません。正しくは
if(s3.equals(s4)){ でした。上記のようにしたらうまくいきました。ありがとうございました。 | ||||||||
|
投稿日時: 2005-07-24 02:11
上記でもありましたように下記のようなコードを書くとコンソールへの出力結果は
s3とs4のオブジェクト比較となるため「異なる」となります。 ところがs1とs2にfinalの修飾子を付加すると出力結果は「同じ」となってしまいます。 コンパイラによるオプティマイザ(s3="abc"とした場合、s3==s4の結果は同じになる) を避けるため s3=s1+s2 とあえて記述しているのですがfinalの修飾子を付ける事で コンパイラの力により同様のことが起こるのでしょうか?
[ メッセージ編集済み 編集者: かんたろう 編集日時 2005-07-24 02:17 ] [ メッセージ編集済み 編集者: かんたろう 編集日時 2005-07-24 02:24 ] [ メッセージ編集済み 編集者: かんたろう 編集日時 2005-07-24 02:25 ] | ||||||||
|
投稿日時: 2005-07-25 10:58
コンパイラによる最適化の結果ですね。
finalをつける前後で、コンパイル後の.classを逆コンパイルしてみると... finalをつけない
finalをつける
のように、finalをつけると、s3の値がリテラルに置き換わっています。 |
1