文字列を比較する

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

↑バージョンを示す変数やプロパティはなさそうなのでメソッドから取得

実行環境