文字列の比較とか参照渡しとか

  • 投稿日:
  • by

hhgp

コードの面構え、というか、書かれたコードの見た目は、C++でも、Javaでも、ActionScriptでも、C#でもなんとなく似通っているのですが、似通っているからこそ、混乱することもあるんです。

某アドベンチャーゲームの移植とかしているのですが、入力された単語と辞書とのマッチングが必要になります。が、辞書にあるはずの言葉を入れいているのに全然マッチしない(/_T)

おかしいなー、と、30分くらい考えて、思い出した。Javaでは文字列の比較は、String クラスだったら、if (cmd == dictword) みたいにしちゃだめで、正しくは、if(cmd.equals(dicword)) とか書かないといけないのでした。

ゲームオーバになって、最初からトライしようとしたら、持ち物などが、ゲームオーバ時を引き継いでしまっている。

初期データを読み込んで、ゲーム開始時に userData = initData; とかやっているわけですが、Javaは、intみたいな基本型は値渡しなのに、クラスインスタンスは参照渡しという、へんてこな仕様だったのでした。

つまり、コピーして渡していたつもりが、参照だけが渡ってしまったので、値が全部書き換えられ続けていたと。コピーコンストラクタをつくって、userData = new UserData(initData)のようにして、明示的にコピーするようにしました。なかなかに奥が深い。(深くないって。おれが浅いんだって。)