文字列を比較する
Javaの場合、==とequals()は別の意味を持つ。
==は同じオブジェクトを参照しているかを評価し、
equals()は、同じ内容の文字列であるかどうかを評価する。
public class StringCompare{ public static void main(String args[]){ String s1 = "abc"; String s2 = "abc"; String s3 = new String("abc"); String s4 = s3; String s5 = s3; String s6 = new String("abc"); String s7= new String("abc"); System.out.println(s1==s2); System.out.println(s4==s5); System.out.println(s6==s7); System.out.println(s1.equals(s2)); System.out.println(s4.equals(s4)); System.out.println(s6.equals(s7)); } }
結果
true true false true true true
↑s6とs7は別のオブジェクトになるため、==だとfalseになる
参考
『Javaにおける文字/文字列の扱い方』
http://www.itarchitect.jp/beginners/-/10422-4.html
これに対してGroovyでは==とequals() は同じです。
s1 = "abc" s2 = "abc" s3 = new String("abc") s4 = s3 s5 = s3 s6 = new String("abc") s7= new String("abc") s1==s2 s4==s5 s6==s7 s1.equals(s2) s4.equals(s4) s6.equals(s7)
===> abc ===> abc ===> abc ===> abc ===> abc ===> abc ===> abc ===> true ===> true ===> true ===> true ===> true ===> true
Javaのequlas()のように同じオブジェクトを参照しているかを
評価したい場合はis()を使用する。
s6.is(s7)
===> false
等しいか等しくないか
"蛙の子" == "蛙の子" "蛙の子" == "蛙" ===> true ===> false
大文字小文字を区別せずに評価
大文字小文字を無視して比較
"Content".compareToIgnoreCase("CONTENT") == 0 ===> true
↑同じ場合は0というのは、C言語のstrcmpと同じ仕様ですな。
Javaでこの仕様はどうかと思うが・・・
小文字に変換して比較
"Content".toLowerCase() == "CONTENT".toLowerCase() ===> true
↑こっちの方が直感的だと思える。
(~/(?i)CONTENT/).matcher("Content").find() ===> true
↑正規表現だと長ったらしいしな
文字コード順
"abc" > "xyz" "abc" < "xyz" ===> false ===> true
Groovyのバージョン比較
GROOVY_VERSION = org.codehaus.groovy.runtime.InvokerHelper.getVersion() GROOVY_VERSION >= "1.6.5" ===> 1.6.5 ===> true
↑バージョンを示す変数やプロパティはなさそうなのでメソッドから取得
実行環境
- OS:Windows XP
- Groovy Version: 1.6.5
- JVM: 1.6.0_12