コンピュータアルゴリズムの時間でしかたなかくJava使わされてるわけですが、値の交換swapをする必要がでてきました。課題は穴埋め式でコード中に使ってくださいよと言わんばかりの変数tmpがあるわけですが、関数にまとめた方が見通しいいじゃんと思ってswap(a,b)を書こうとする。・・・書けない。Javaは正直あんまり詳しくないんでぐぐってみるが、答えらしきものは書いてない。仕方なく課題はベタベタと値交換のコードをmain中に埋め込むダサい仕様で提出。
で、今日になってcoreJava2(isbn:4756139701)を開いてみたところp.168に

Java言語では、メソッドは常に値渡しである。つまり、メソッドはすべての引数の値のコピーを取得する。特に、メソッドは渡された引数の変数の内容をまったく変更できない。

と目を疑いたくなるような断言が。読みすすめてみるとJavaでは本気でオブジェクト型以外参照渡しができならしい。ついでにIntegerなら参照渡ししてくれるかなと淡い期待を抱いて実験してみたけど、これもしっかり値渡し。ファック、何が悲しくてswap(a,b)に3行と一時変数使わなきゃならんのだ。C++ならマクロorテンプレート+ 仮引数の前に&ですべての型について解決するのに。なーんーだーかーなー。