文字列を複製する
文字列を複製するには、代入するか、新しくStringオブジェクトを作る
StringクラスはCloneable インタフェースを未サポートclone()は使えない。なんでだっけ?
ソース
str1 = "This is a String" str2 = new String(str1) str1.hashCode() str2.hashCode() str3 = str1 str1.hashCode() str3.hashCode() str1 = "This is another string" str1.hashCode() str2.hashCode() str3.hashCode() str1 str2 str3 str1 == str2 str1 == str3 str1.equals(str2) str1.equals(str3)
実行環境
- OS:Windows XP
- Groovy Version: 1.6.5
- JVM: 1.6.0_12
結果
groovy:000> str1 = "This is a String" ===> This is a String groovy:000> str2 = new String(str1) ===> This is a String groovy:000> str1.hashCode() ===> 682948772 groovy:000> str2.hashCode() ===> 682948772
↑new しても同じオブジェクト
groovy:000> str3 = str1 ===> This is a String groovy:000> str3.hashCode() ===> 682948772
↑代入しても同じオブジェクト
groovy:000> str1 = "This is another string" ===> This is another string groovy:000> str1.hashCode() ===> 612531362 groovy:000> str2.hashCode() ===> 682948772 groovy:000> str3.hashCode() ===> 682948772
↑str1を変更すると、str1のオブジェクトが変わる。str2、str3は変更されない。
groovy:000> println str1 This is another string ===> null groovy:000> println str2 This is a String ===> null groovy:000> println str3 This is a String ===> null
↑Stringの中身。str1は変わってるけど、str2、str3は変わらない。
groovy:000> str1 == str2 ===> false groovy:000> str1 == str3 ===> false groovy:000> str1.equals(str2) ===> false groovy:000> str1.equals(str3) ===> false
↑比較。falseになる。
ちなみにclone()メソッドを使うと
groovy:000> str4 = str1.clone() ERROR java.lang.CloneNotSupportedException: java.lang.String at groovysh_evaluate.run (groovysh_evaluate:2) ...
↑CloneNotSupportedExceptionになる。