2011/09/17

[java]引数にfinalをつけるとどうなるのだろう (2)

http://hiro99ma.blogspot.com/2011/09/javafinal-1.html

なんだかよくわからなくなってきた。

final byte[] a = new byte[5];

こんなことをしても、バイトコードでは変化がなかった。
もしかすると、finalはバイトコードに現れる類のものではないのかもしれない。

上記のコードに続けて、

a = new byte[3];

などとすると、こっちはエラーになる。
そうなると、finalはバイナリレベルではなくコンパイルレベルでやっているだけということか。


これでようやく、議論の意味がわかった。

引数にfinalをつけても、確かに意味がない。
私みたいにfinalをよくわかってない人にとっては「書き換えないんだろう」とすら思ってしまう。
そう考えると、引数ではfinalを付けない方が親切かも。

もし、「a = new byte[3]」みたいにしないことでコンパイル時の最適化が狙えるのであれば、それは関数内で最初に「final byte[] b = a;」のように引き取った方がいいのかもしれん。

C/C++のconstとは違うもの、という認識を強く持っておかねば。

 

IBMの記事があったので、載せておかねば。

http://www.ibm.com/developerworks/jp/java/library/j-jtp1029/

 

あれ・・・ということは、戻り値をfinalで戻す、ということはできず、それはメソッドがfinalってことになるのか??
ってことは、static classのフィールド(オブジェクト型)を返す関数なんて、最悪ではないか!

ライブラリを作り直さねば・・・。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。