ゆとりーなの日記

日記的な事を書いて行くと思はれる

Java勢にCをdisられたら頭にくるけど僕はJavaをdisります

Javaってカデゴリーは意地でも作りません。あくまでその他です。
今回はJavaの==ってなんなの!?って愚痴です。
intとかの基本型の==比較は直感的です。値が同じならtrue、違ったらfalseです。クソなのは参照型です。==が比較するのが参照しているものが同じかどうかってことです。まぁ参照型って言うんだからそういう挙動なのは分かるんですが、Javaの参照型ってのがそもそも分かりにくいんです。
String型が参照型なのがC++になれると結構???って感じになる気がするんですね。==での比較の挙動が文字列がstd::string以前のconst char *の古の時代に引き戻されるのです。const char *文字列を==で比較してもダメで、strcmp関数を使わなきゃいけないことは叩き込まれてるわけです。Javaだとこれがequalsメソッドってことになるんだと思うんですが、Cだとconst char *どうしを比較してもどう考えても中の文字列を比較してそうに見えないのに対して、Stringどうしだと、ぱっと見全然参照に見えないので==で文字列を比較してるように感じられるんです。
もちろん組み込み演算子にクラスの中身の比較をやらせることは無理なので、参照してるものの比較くらいしか出来ないことは分かるんですが、こういうのはクラスの命名規則的なものから覚えていくものなんですかね。大文字から始まる型は参照型、C++で言うと&が付いているようなものみたいな感じになるんですかね。まぁJavaの参照型はC++のポインタと参照を足して2で割ったような挙動をするのでそこで???ってなったりするんですがね。
そもそもJavaのequalsは対称性の観点から言っても美しくないですし、演算子オーバーロードを切った時点で残当してる感がある気がします。
夏ごろまでJavaの授業があるので当面定期的にJavaDisりが入ることが予想されますがご了承ください。