/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static class Foo
{
private static String str
= "abcd" ; static String getAbcdOfFoo
( ) { return str;
}
}
return "abcd" ;
}
{
// your code goes here
String d
= "a" + ( "b" + "c" ) + "d" ; String j
= Ideone.
Foo .
getAbcdOfFoo ( ) ; String k
= Bar.
getAbcdOfBar ( ) ; String l
= ( new Baz
( ) ) .
getAbcdOfBaz ( ) ; String p
= ( n
= "ab" ) + ( o
= "cd" ) ;
b = b.intern ( ) ;
c = c.intern ( ) ;
d = d.intern ( ) ;
e = e.intern ( ) ;
f = f.intern ( ) ;
g = g.intern ( ) ;
h = h.intern ( ) ;
i = i.intern ( ) ;
j = j.intern ( ) ;
k = k.intern ( ) ;
l = l.intern ( ) ;
m = m.intern ( ) ;
n = n.intern ( ) ;
o = o.intern ( ) ;
p = p.intern ( ) ;
q = q.intern ( ) ;
System .
out .
println ( "== operator" ) ; System .
out .
println ( "a = \" abcd\" " ) ; System .
out .
println ( "a == b -> " + ( a
== b
) + "\t // b = \" abcd\" ; b = b.intern();" ) ; System .
out .
println ( "a == c -> " + ( a
== c
) + "\t // c = new String(\" abcd\" ); c = c.intern();" ) ; System .
out .
println ( "a == d -> " + ( a
== d
) + "\t // d = \" a\" + (\" b\" + \" c\" ) + \" d\" ; d = d.intern();" ) ; System .
out .
println ( "a == g -> " + ( a
== g
) + "\t // e = \" ab\" ; g = e + \" cd\" ; g = g.intern();" ) ; System .
out .
println ( "a == h -> " + ( a
== h
) + "\t // f = \" cd\" ; h = e + f; h = h.intern();" ) ; System .
out .
println ( "a == i -> " + ( a
== i
) + "\t // i = Ideone.getAbcd(); i = i.intern();" ) ; System .
out .
println ( "a == j -> " + ( a
== j
) + "\t // j = Ideone.Foo.getAbcdOfFoo(); j = j.intern();" ) ; System .
out .
println ( "a == k -> " + ( a
== k
) + "\t // k = Bar.getAbcdOfBar(); k = k.intern();" ) ; System .
out .
println ( "a == l -> " + ( a
== l
) + "\t // l = (new Baz()).getAbcdOfBaz(); l = l.intern();" ) ; System .
out .
println ( "a == m -> " + ( a
== m
) + "\t // m = \" a\" .concat(\" bcd\" ); m = m.intern();" ) ; System .
out .
println ( "a == p -> " + ( a
== p
) + "\t // p = (n = \" ab\" ) + (o = \" cd\" ); p = p.intern();" ) ; System .
out .
println ( "a == q -> " + ( a
== q
) + "\t // q = \" ab\" ; q += \" cd\" ; q = q.intern();" ) ;
}
}
class Bar
{
private static String str
= "abcd" ; static String getAbcdOfBar
( ) { return str;
}
}
class Baz
{
Baz( ) {
str = "abcd" ;
}
return str;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBjbGFzcyBGb28KCXsKCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyID0gImFiY2QiOwoJCXN0YXRpYyBTdHJpbmcgZ2V0QWJjZE9mRm9vKCkgewoJCQlyZXR1cm4gc3RyOwoJCX0KCX0KCQoJc3RhdGljIFN0cmluZyBnZXRBYmNkKCkgewoJCXJldHVybiAiYWJjZCI7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQkKCQlTdHJpbmcgYSA9ICJhYmNkIjsKCQlTdHJpbmcgYiA9ICJhYmNkIjsKCQlTdHJpbmcgYyA9IG5ldyBTdHJpbmcoImFiY2QiKTsKCQlTdHJpbmcgZCA9ICJhIiArICgiYiIgKyAiYyIpICsgImQiOwoJCVN0cmluZyBlID0gImFiIjsKCQlTdHJpbmcgZiA9ICJjZCI7CgkJU3RyaW5nIGcgPSBlICsgImNkIjsKCQlTdHJpbmcgaCA9IGUgKyBmOwoJCVN0cmluZyBpID0gSWRlb25lLmdldEFiY2QoKTsKCQlTdHJpbmcgaiA9IElkZW9uZS5Gb28uZ2V0QWJjZE9mRm9vKCk7CgkJU3RyaW5nIGsgPSBCYXIuZ2V0QWJjZE9mQmFyKCk7CgkJU3RyaW5nIGwgPSAobmV3IEJheigpKS5nZXRBYmNkT2ZCYXooKTsKCQlTdHJpbmcgbSA9ICJhIi5jb25jYXQoImJjZCIpOwoJCVN0cmluZyBuLCBvOwoJCVN0cmluZyBwID0gKG4gPSAiYWIiKSArIChvID0gImNkIik7CgkJU3RyaW5nIHEgPSAiYWIiOyBxICs9ICJjZCI7CgkJCgkJYiA9IGIuaW50ZXJuKCk7CgkJYyA9IGMuaW50ZXJuKCk7CgkJZCA9IGQuaW50ZXJuKCk7CgkJZSA9IGUuaW50ZXJuKCk7CgkJZiA9IGYuaW50ZXJuKCk7CgkJZyA9IGcuaW50ZXJuKCk7CgkJaCA9IGguaW50ZXJuKCk7CgkJaSA9IGkuaW50ZXJuKCk7CgkJaiA9IGouaW50ZXJuKCk7CgkJayA9IGsuaW50ZXJuKCk7CgkJbCA9IGwuaW50ZXJuKCk7CgkJbSA9IG0uaW50ZXJuKCk7CgkJbiA9IG4uaW50ZXJuKCk7CgkJbyA9IG8uaW50ZXJuKCk7CgkJcCA9IHAuaW50ZXJuKCk7CgkJcSA9IHEuaW50ZXJuKCk7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCI9PSBvcGVyYXRvciIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYSA9IFwiYWJjZFwiIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGIgLT4gIiArIChhID09IGIpICsgIlx0IC8vIGIgPSBcImFiY2RcIjsgYiA9IGIuaW50ZXJuKCk7Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGMgLT4gIiArIChhID09IGMpICsgIlx0IC8vIGMgPSBuZXcgU3RyaW5nKFwiYWJjZFwiKTsgYyA9IGMuaW50ZXJuKCk7Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGQgLT4gIiArIChhID09IGQpICsgIlx0IC8vIGQgPSBcImFcIiArIChcImJcIiArIFwiY1wiKSArIFwiZFwiOyBkID0gZC5pbnRlcm4oKTsiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gZyAtPiAiICsgKGEgPT0gZykgKyAiXHQgLy8gZSA9IFwiYWJcIjsgZyA9IGUgKyBcImNkXCI7IGcgPSBnLmludGVybigpOyIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYSA9PSBoIC0+ICIgKyAoYSA9PSBoKSArICJcdCAvLyBmID0gXCJjZFwiOyBoID0gZSArIGY7IGggPSBoLmludGVybigpOyIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYSA9PSBpIC0+ICIgKyAoYSA9PSBpKSArICJcdCAvLyBpID0gSWRlb25lLmdldEFiY2QoKTsgaSA9IGkuaW50ZXJuKCk7Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGogLT4gIiArIChhID09IGopICsgIlx0IC8vIGogPSBJZGVvbmUuRm9vLmdldEFiY2RPZkZvbygpOyBqID0gai5pbnRlcm4oKTsiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gayAtPiAiICsgKGEgPT0gaykgKyAiXHQgLy8gayA9IEJhci5nZXRBYmNkT2ZCYXIoKTsgayA9IGsuaW50ZXJuKCk7Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGwgLT4gIiArIChhID09IGwpICsgIlx0IC8vIGwgPSAobmV3IEJheigpKS5nZXRBYmNkT2ZCYXooKTsgbCA9IGwuaW50ZXJuKCk7Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IG0gLT4gIiArIChhID09IG0pICsgIlx0IC8vIG0gPSBcImFcIi5jb25jYXQoXCJiY2RcIik7IG0gPSBtLmludGVybigpOyIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYSA9PSBwIC0+ICIgKyAoYSA9PSBwKSArICJcdCAvLyBwID0gKG4gPSBcImFiXCIpICsgKG8gPSBcImNkXCIpOyBwID0gcC5pbnRlcm4oKTsiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gcSAtPiAiICsgKGEgPT0gcSkgKyAiXHQgLy8gcSA9IFwiYWJcIjsgcSArPSBcImNkXCI7IHEgPSBxLmludGVybigpOyIpOwoKCgl9Cn0KCmNsYXNzIEJhcgp7Cglwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyID0gImFiY2QiOwoJc3RhdGljIFN0cmluZyBnZXRBYmNkT2ZCYXIoKSB7CgkJcmV0dXJuIHN0cjsKCX0KfQoKY2xhc3MgQmF6CnsKCXByaXZhdGUgU3RyaW5nIHN0cjsKCUJheigpIHsKCQlzdHIgPSAiYWJjZCI7Cgl9CglTdHJpbmcgZ2V0QWJjZE9mQmF6KCkgewoJCXJldHVybiBzdHI7Cgl9Cn0=
stdin
U3RyaW5n44Kv44Op44K544GuaW50ZXJu44Oh44K944OD44OJ44Go5L2/44Gj44Gf44KJ44Gp44GG44Gq44KL44GL77yfCgppbnRlcm7jg6Hjgr3jg4Pjg4njga/lkIzkuIDmloflrZfliJfjgpLjgbLjgajjgaTjga7lhbHpgJrjgqTjg7Pjgrnjgr/jg7PjgrnjgajjgZfjgabnrqHnkIbjgZfjgZ/jgYTjgajjgY3jgavkvb/jgYbjg6Hjgr3jg4Pjg4njgaAK44Oq44OG44Op44Or5paH5a2X5YiX44Gv5YWo44GmaW50ZXJu44Oh44K944OD44OJ44Gr44KI44Gj44GmU3RyaW5n44Kv44Op44K544Gu5YaF6YOo44Gn5YWx6YCa44Kk44Oz44K544K/44Oz44K544Go44GX44Gm566h55CG44GV44KM44Gm44GE44KLKOODl+ODvOODq+OBleOCjOOBpuOBhOOCiykKaW50ZXJu44Oh44K944OD44OJ44KS5ZG844Gz5Ye644GZ44GoCmludGVybuODoeOCveODg+ODieOCkuWRvOOBs+WHuuOBl+OBn+OCpOODs+OCueOCv+ODs+OCueOBqOWQjOS4gOOBruaWh+Wtl+WIl+OCkuOCguOBpOWFsemAmuOCpOODs+OCueOCv+ODs+OCueOBjOWtmOWcqOOBmeOCi+WgtOWQiOOAgeOBneOBruWFsemAmuOCpOODs+OCueOCv+ODs+OCueOCkui/lOOBl+OBpuOBj+OCjOOCiwrjgb7jgZ/jgIHlkIzkuIDmloflrZfliJfjga7lhbHpgJrjgqTjg7Pjgrnjgr/jg7PjgrnjgYzjgarjgYTloLTlkIjjgIFpbnRlcm7jg6Hjgr3jg4Pjg4njgpLlkbzjgbPlh7rjgZfjgZ/jgqTjg7Pjgrnjgr/jg7PjgrnjgpLlhbHpgJrjgqTjg7Pjgrnjgr/jg7PjgrnjgajjgZfjgabmlrDjgZfjgY/nmbvpjLLjgZfjgabjgY/jgozjgovjga7jgaAKClN0cmluZyBhID0gJnF1b3Q7YWJjZCZxdW90OzsKU3RyaW5nIGMgPSBuZXcgU3RyaW5nKCZxdW90O2FiY2QmcXVvdDspOwrjgZPjgZPjgb7jgafjga8gYSDjgaggYyDjga/liKXjga7jgqTjg7Pjgrnjgr/jg7PjgrnjgaDjgYwKYyA9IGMuaW50ZXJuKCk7CuOBqOOBmeOCi+OBk+OBqOOBq+OCiOOBo+OBpiBjIOOBq+OBryBh44CA44Go5ZCM5LiA44Gu44Kk44Oz44K544K/44Oz44K544GM5Luj5YWl44GV44KM44CAYSA9PSBjIOOBjCB0cnVlIOOBq+OBquOCiwoKCuWQjOS4gOOBruaWh+Wtl+WIl+OCkuWkieaVsOOChOmFjeWIl+ODu+OCs+ODrOOCr+OCt+ODp+ODs+etieOBq+Wkp+mHj+OBq+mVt+acn+S/neaMgeOBmeOCi+W/heimgeOBjOOBguOCi+WgtOWQiOOBr2ludGVybuODoeOCveODg+ODieOBp+ODoeODouODquOBruevgOe0hOOBq+OBquOCi+OBi+OCguOBl+OCjOOBquOBhAo=
Stringクラスのinternメソッドと使ったらどうなるか?
internメソッドは同一文字列をひとつの共通インスタンスとして管理したいときに使うメソッドだ
リテラル文字列は全てinternメソッドによってStringクラスの内部で共通インスタンスとして管理されている(プールされている)
internメソッドを呼び出すと
internメソッドを呼び出したインスタンスと同一の文字列をもつ共通インスタンスが存在する場合、その共通インスタンスを返してくれる
また、同一文字列の共通インスタンスがない場合、internメソッドを呼び出したインスタンスを共通インスタンスとして新しく登録してくれるのだ
String a = "abcd";
String c = new String("abcd");
ここまでは a と c は別のインスタンスだが
c = c.intern();
とすることによって c には a と同一のインスタンスが代入され a == c が true になる
同一の文字列を変数や配列・コレクション等に大量に長期保持する必要がある場合はinternメソッドでメモリの節約になるかもしれない