/* 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" ) ;
System .
out .
println ( "== operator" ) ; System .
out .
println ( "a = \" abcd\" " ) ; System .
out .
println ( "a == b -> " + ( a
== b
) + "\t // b = \" abcd\" " ) ; System .
out .
println ( "a == c -> " + ( a
== c
) + "\t // c = new String(\" abcd\" )" ) ; System .
out .
println ( "a == d -> " + ( a
== d
) + "\t // d = \" a\" + (\" b\" + \" c\" ) + \" d\" " ) ; System .
out .
println ( "a == g -> " + ( a
== g
) + "\t // e = \" ab\" ; g = e + \" cd\" " ) ; System .
out .
println ( "a == h -> " + ( a
== h
) + "\t // f = \" cd\" ; h = e + f" ) ; System .
out .
println ( "a == i -> " + ( a
== i
) + "\t // i = Ideone.getAbcd()" ) ; System .
out .
println ( "a == j -> " + ( a
== j
) + "\t // j = Ideone.Foo.getAbcdOfFoo()" ) ; System .
out .
println ( "a == k -> " + ( a
== k
) + "\t // k = Bar.getAbcdOfBar()" ) ; System .
out .
println ( "a == l -> " + ( a
== l
) + "\t // l = (new Baz()).getAbcdOfBaz()" ) ; System .
out .
println ( "a == m -> " + ( a
== m
) + "\t // m = \" a\" .concat(\" bcd\" )" ) ; System .
out .
println ( "a == p -> " + ( a
== p
) + "\t // p = (n = \" ab\" ) + (o = \" cd\" )" ) ; System .
out .
println ( "a == q -> " + ( a
== q
) + "\t // q = \" ab\" ; q += \" cd\" " ) ;
System .
out .
println ( "equals method" ) ; System .
out .
println ( "a = \" abcd\" " ) ; System .
out .
println ( "a.equals(b) -> " + a.
equals ( b
) + "\t // b = \" abcd\" " ) ; System .
out .
println ( "a.equals(c) -> " + a.
equals ( c
) + "\t // c = new String(\" abcd\" )" ) ; System .
out .
println ( "a.equals(d) -> " + a.
equals ( d
) + "\t // d = \" a\" + (\" b\" + \" c\" ) + \" d\" " ) ; System .
out .
println ( "a.equals(g) -> " + a.
equals ( g
) + "\t // e = \" ab\" ; g = e + \" cd\" " ) ; System .
out .
println ( "a.equals(h) -> " + a.
equals ( h
) + "\t // f = \" cd\" ; h = e + f" ) ; System .
out .
println ( "a.equals(i) -> " + a.
equals ( i
) + "\t // i = Ideone.getAbcd()" ) ; System .
out .
println ( "a.equals(j) -> " + a.
equals ( j
) + "\t // j = Ideone.Foo.getAbcdOfFoo()" ) ; System .
out .
println ( "a.equals(k) -> " + a.
equals ( k
) + "\t // k = Bar.getAbcdOfBar()" ) ; System .
out .
println ( "a.equals(l) -> " + a.
equals ( l
) + "\t // l = (new Baz()).getAbcdOfBaz()" ) ; System .
out .
println ( "a.equals(m) -> " + a.
equals ( m
) + "\t // m = \" a\" .concat(\" bcd\" )" ) ; System .
out .
println ( "a.equals(p) -> " + a.
equals ( p
) + "\t // p = (n = \" ab\" ) + (o = \" cd\" )" ) ; System .
out .
println ( "a.equals(q) -> " + a.
equals ( q
) + "\t // q = \" ab\" ; q += \" cd\" " ) ;
}
}
class Bar
{
private static String str
= "abcd" ; static String getAbcdOfBar
( ) { return str;
}
}
class Baz
{
Baz( ) {
str = "abcd" ;
}
return str;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBjbGFzcyBGb28KCXsKCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyID0gImFiY2QiOwoJCXN0YXRpYyBTdHJpbmcgZ2V0QWJjZE9mRm9vKCkgewoJCQlyZXR1cm4gc3RyOwoJCX0KCX0KCQoJc3RhdGljIFN0cmluZyBnZXRBYmNkKCkgewoJCXJldHVybiAiYWJjZCI7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQkKCQlTdHJpbmcgYSA9ICJhYmNkIjsKCQlTdHJpbmcgYiA9ICJhYmNkIjsKCQlTdHJpbmcgYyA9IG5ldyBTdHJpbmcoImFiY2QiKTsKCQlTdHJpbmcgZCA9ICJhIiArICgiYiIgKyAiYyIpICsgImQiOwoJCVN0cmluZyBlID0gImFiIjsKCQlTdHJpbmcgZiA9ICJjZCI7CgkJU3RyaW5nIGcgPSBlICsgImNkIjsKCQlTdHJpbmcgaCA9IGUgKyBmOwoJCVN0cmluZyBpID0gSWRlb25lLmdldEFiY2QoKTsKCQlTdHJpbmcgaiA9IElkZW9uZS5Gb28uZ2V0QWJjZE9mRm9vKCk7CgkJU3RyaW5nIGsgPSBCYXIuZ2V0QWJjZE9mQmFyKCk7CgkJU3RyaW5nIGwgPSAobmV3IEJheigpKS5nZXRBYmNkT2ZCYXooKTsKCQlTdHJpbmcgbSA9ICJhIi5jb25jYXQoImJjZCIpOwoJCVN0cmluZyBuLCBvOwoJCVN0cmluZyBwID0gKG4gPSAiYWIiKSArIChvID0gImNkIik7CgkJU3RyaW5nIHEgPSAiYWIiOyBxICs9ICJjZCI7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCI9PSBvcGVyYXRvciIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYSA9IFwiYWJjZFwiIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGIgLT4gIiArIChhID09IGIpICsgIlx0IC8vIGIgPSBcImFiY2RcIiIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYSA9PSBjIC0+ICIgKyAoYSA9PSBjKSArICJcdCAvLyBjID0gbmV3IFN0cmluZyhcImFiY2RcIikiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gZCAtPiAiICsgKGEgPT0gZCkgKyAiXHQgLy8gZCA9IFwiYVwiICsgKFwiYlwiICsgXCJjXCIpICsgXCJkXCIiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gZyAtPiAiICsgKGEgPT0gZykgKyAiXHQgLy8gZSA9IFwiYWJcIjsgZyA9IGUgKyBcImNkXCIiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gaCAtPiAiICsgKGEgPT0gaCkgKyAiXHQgLy8gZiA9IFwiY2RcIjsgaCA9IGUgKyBmIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGkgLT4gIiArIChhID09IGkpICsgIlx0IC8vIGkgPSBJZGVvbmUuZ2V0QWJjZCgpIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGogLT4gIiArIChhID09IGopICsgIlx0IC8vIGogPSBJZGVvbmUuRm9vLmdldEFiY2RPZkZvbygpIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IGsgLT4gIiArIChhID09IGspICsgIlx0IC8vIGsgPSBCYXIuZ2V0QWJjZE9mQmFyKCkiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gbCAtPiAiICsgKGEgPT0gbCkgKyAiXHQgLy8gbCA9IChuZXcgQmF6KCkpLmdldEFiY2RPZkJheigpIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhID09IG0gLT4gIiArIChhID09IG0pICsgIlx0IC8vIG0gPSBcImFcIi5jb25jYXQoXCJiY2RcIikiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPT0gcCAtPiAiICsgKGEgPT0gcCkgKyAiXHQgLy8gcCA9IChuID0gXCJhYlwiKSArIChvID0gXCJjZFwiKSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYSA9PSBxIC0+ICIgKyAoYSA9PSBxKSArICJcdCAvLyBxID0gXCJhYlwiOyBxICs9IFwiY2RcIiIpOwoKCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscyBtZXRob2QiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEgPSBcImFiY2RcIiIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYS5lcXVhbHMoYikgLT4gIiArIGEuZXF1YWxzKGIpICsgIlx0IC8vIGIgPSBcImFiY2RcIiIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYS5lcXVhbHMoYykgLT4gIiArIGEuZXF1YWxzKGMpICsgIlx0IC8vIGMgPSBuZXcgU3RyaW5nKFwiYWJjZFwiKSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYS5lcXVhbHMoZCkgLT4gIiArIGEuZXF1YWxzKGQpICsgIlx0IC8vIGQgPSBcImFcIiArIChcImJcIiArIFwiY1wiKSArIFwiZFwiIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhLmVxdWFscyhnKSAtPiAiICsgYS5lcXVhbHMoZykgKyAiXHQgLy8gZSA9IFwiYWJcIjsgZyA9IGUgKyBcImNkXCIiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEuZXF1YWxzKGgpIC0+ICIgKyBhLmVxdWFscyhoKSArICJcdCAvLyBmID0gXCJjZFwiOyBoID0gZSArIGYiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEuZXF1YWxzKGkpIC0+ICIgKyBhLmVxdWFscyhpKSArICJcdCAvLyBpID0gSWRlb25lLmdldEFiY2QoKSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYS5lcXVhbHMoaikgLT4gIiArIGEuZXF1YWxzKGopICsgIlx0IC8vIGogPSBJZGVvbmUuRm9vLmdldEFiY2RPZkZvbygpIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhLmVxdWFscyhrKSAtPiAiICsgYS5lcXVhbHMoaykgKyAiXHQgLy8gayA9IEJhci5nZXRBYmNkT2ZCYXIoKSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYS5lcXVhbHMobCkgLT4gIiArIGEuZXF1YWxzKGwpICsgIlx0IC8vIGwgPSAobmV3IEJheigpKS5nZXRBYmNkT2ZCYXooKSIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYS5lcXVhbHMobSkgLT4gIiArIGEuZXF1YWxzKG0pICsgIlx0IC8vIG0gPSBcImFcIi5jb25jYXQoXCJiY2RcIikiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImEuZXF1YWxzKHApIC0+ICIgKyBhLmVxdWFscyhwKSArICJcdCAvLyBwID0gKG4gPSBcImFiXCIpICsgKG8gPSBcImNkXCIpIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJhLmVxdWFscyhxKSAtPiAiICsgYS5lcXVhbHMocSkgKyAiXHQgLy8gcSA9IFwiYWJcIjsgcSArPSBcImNkXCIiKTsKCQkKCX0KfQoKY2xhc3MgQmFyCnsKCXByaXZhdGUgc3RhdGljIFN0cmluZyBzdHIgPSAiYWJjZCI7CglzdGF0aWMgU3RyaW5nIGdldEFiY2RPZkJhcigpIHsKCQlyZXR1cm4gc3RyOwoJfQp9CgpjbGFzcyBCYXoKewoJcHJpdmF0ZSBTdHJpbmcgc3RyOwoJQmF6KCkgewoJCXN0ciA9ICJhYmNkIjsKCX0KCVN0cmluZyBnZXRBYmNkT2ZCYXooKSB7CgkJcmV0dXJuIHN0cjsKCX0KfQ==
stdin
SmF2YeOBq+OBiuOBhOOBpuWQjOS4gOOBruODquODhuODqeODq+aWh+Wtl+WIl+OBr+WQjOS4gOOBruOCpOODs+OCueOCv+ODs+OCueOBq+OBquOCiyAo54Sh6aeE44Gq44Oh44Oi44Oq5Ymy44KK5b2T44Gm44KS55yB44GP44K344K544OG44OgKQoKPT3mvJTnrpflrZDjgafjga7lj4LnhaflnovlpInmlbDjga7mr5TovIPjga8K5aSJ5pWw44Gu5Y+C54Wn5YWI44Gu44Oh44Oi44Oq55Wq5Zyw77yI44Kk44Oz44K544K/44Oz44K544Gu5YCL5Yil6KqN6K2Y44Gu44Gf44KBSmF2YeODnuOCt+ODs+OBjOWJsuOCiuW9k+OBpuOBn+eVquWPt+OBruOCiOOBhuOBquOCguOBru+8ieOBruavlOi8g+OBq+OBquOCiwoo5Y+C54Wn5Z6L5aSJ5pWw44Go44Gv44Kk44Oz44K544K/44Oz44K544Gu55Wq5Y+377yI44Oh44Oi44Oq55Wq5Zyw77yJ44KS5L+d5a2Y44GX44Gm44KL5aSJ5pWw44Gq44Gu44Gn44GC44KLKQooaW50LGJ5dGUsc2hvcnQsbG9uZyxjaGFyLGZsb2F0LGRvdWJsZeOBquOBqeOBr+ODl+ODquODn+ODhuOCo+ODluWei+OBp+OBguOCiuWPgueFp+Wei+OBqOOBr+WkieaVsOOBqOOBl+OBpuaAp+izquOBjOeVsOOBquOCi+OBruOBp+azqOaEjykKCuOCiOOBo+OBpiBhIOOBqCBiIOOBr+OBqeOBoeOCieOCguWQjOS4gOOBruODquODhuODqeODq+OBruOCpOODs+OCueOCv+ODs+OCueOCkuWPgueFp+OBl+OBpuOBhOOCi+OBruOBpyBhID09IGIg44GvIHRydWUg44Gr44Gq44KLCgrkuIDmlrnjgIFjIOOBryBuZXcgU3RyaW5nIOOBp+aWsOOBl+OBhOOCpOODs+OCueOCv+ODs+OCueOCkuS9nOOCi+OBk+OBqOOCkuaMh+ekuuOBl+OBpuOBhOOCi+OBruOBpwrjg6rjg4bjg6njg6vjga7jgqTjg7Pjgrnjgr/jg7Pjgrnjgajjga/liKXjga7jgqTjg7Pjgrnjgr/jg7PjgrnjgYznlJ/miJDjgZXjgozjgovjgZPjgajjgavjgarjgovjga7jgacK5Y+C54Wn5YWI44Gu44Oh44Oi44Oq55Wq5Zyw44KS5q+U6LyD44GZ44KLIGEgPT0gYyDjga8gZmFsc2Ug44Go44Gq44KLCgplcXVhbHPjg6Hjgr3jg4Pjg4njgafjga7mr5TovIPjga/jgZ3jgozjgZ7jgozjga7jgq/jg6njgrnjga7lrp/oo4Uo44Kq44O844OQ44O844Op44Kk44OJKeOBq+OCiOOBo+OBpueVsOOBquOCiwpTdHJpbmfjgq/jg6njgrnjga7loLTlkIjjga/lkIzkuIDjga7mloflrZfliJfjgYvjganjgYbjgYvjgpLmr5TovIPjgZnjgosK5YWo44Gm44Gu44Kv44Op44K544Gu5aSn5YWD44Go44Gq44KLT2JqZWN044Kv44Op44K544GuZXF1YWxz44Oh44K944OD44OJ44GvPT3mvJTnrpflrZDjga7mr5TovIPjgpLjgZnjgovjgaDjgZHjgarjga7jgafmtL7nlJ/jgq/jg6njgrnjgafjga/lv4XopoHjgavlv5zjgZjjgaZlcXVhbHPjg6Hjgr3jg4Pjg4njgpLjgqrjg7zjg5Djg7zjg6njgqTjg4njgZfjgarjgYTjgajjgYTjgZHjgarjgYQKCmQgPSAmcXVvdDthJnF1b3Q7ICsgKCZxdW90O2ImcXVvdDsgKyAmcXVvdDtjJnF1b3Q7KSArICZxdW90O2QmcXVvdDsK44Gu44KI44GG44Gq44Oq44OG44Op44Or5ZCM5aOr44Gu5byP44GvCuOCs+ODs+ODkeOCpOODqeOBjOS6i+WJjeioiOeul+OBl+OBpiZxdW90O2FiY2QmcXVvdDvjgavnm7TjgZfjgabjgZfjgb7jgYbjga7jgacgYSA9PSBkIOOBjCB0cnVlIOOBq+OBquOCiwoK5LiA5pa544GnIGggPSBlICsgZiDjgoQgcCA9IChuID0gJnF1b3Q7YWImcXVvdDspICsgKG8gPSAmcXVvdDtjZCZxdW90Oykg44KEIHEgPSAmcXVvdDthYiZxdW90OzsgcSArPSAmcXVvdDtjZCZxdW90OyDjga7jgojjgYbjgasK5LiA5bqm44Gn44KC44Oq44OG44Op44Or5paH5a2X5YiX44KS5aSJ5pWw44Gr5Luj5YWl44GX44Gm44GX44G+44GG44Go5LiK6KiY44GuIGQg44KI44GG44Gq44Kz44Oz44OR44Kk44Op44Gr44KI44KL5LqL5YmN6KiI566X44KS44GV44KM44KL44GT44Go44Gv44Gq44GE44Gu44Gn5paw44GX44GE44Kk44Oz44K544K/44Oz44K544GM5L2c44KJ44KM44KLCgrjgb7jgZ/jgIEmcXVvdDthJnF1b3Q7LmNvbmNhdCgmcXVvdDtiY2QmcXVvdDsp44CA44Gu44KI44GG44Gq44Oh44K944OD44OJ5ZG844Gz5Ye644GX44Gn44KC44Kz44Oz44OR44Kk44Op44Gr44KI44KL5LqL5YmN6KiI566X44Gv44GV44KM44Gq44GE44Gu44Gn5paw44GX44GE44Kk44Oz44K544K/44Oz44K544GM5L2c44KJ44KM44KLCg==
Javaにおいて同一のリテラル文字列は同一のインスタンスになる (無駄なメモリ割り当てを省くシステム)
==演算子での参照型変数の比較は
変数の参照先のメモリ番地(インスタンスの個別認識のためJavaマシンが割り当てた番号のようなもの)の比較になる
(参照型変数とはインスタンスの番号(メモリ番地)を保存してる変数なのである)
(int,byte,short,long,char,float,doubleなどはプリミティブ型であり参照型とは変数として性質が異なるので注意)
よって a と b はどちらも同一のリテラルのインスタンスを参照しているので a == b は true になる
一方、c は new String で新しいインスタンスを作ることを指示しているので
リテラルのインスタンスとは別のインスタンスが生成されることになるので
参照先のメモリ番地を比較する a == c は false となる
equalsメソッドでの比較はそれぞれのクラスの実装(オーバーライド)によって異なる
Stringクラスの場合は同一の文字列かどうかを比較する
全てのクラスの大元となるObjectクラスのequalsメソッドは==演算子の比較をするだけなので派生クラスでは必要に応じてequalsメソッドをオーバーライドしないといけない
d = "a" + ("b" + "c") + "d"
のようなリテラル同士の式は
コンパイラが事前計算して"abcd"に直してしまうので a == d が true になる
一方で h = e + f や p = (n = "ab") + (o = "cd") や q = "ab"; q += "cd" のように
一度でもリテラル文字列を変数に代入してしまうと上記の d ようなコンパイラによる事前計算をされることはないので新しいインスタンスが作られる
また、"a".concat("bcd") のようなメソッド呼び出しでもコンパイラによる事前計算はされないので新しいインスタンスが作られる