• ベストアンサー

ラッパークラスのvalueOfメソッドについて

あるテキストで、「int i = Integer.valueOf("10");」はvalueOfメソッドの戻り値型がIntegerであるにも関わらずint型変数に代入しようとしているためにコンパイルエラーになると解説されていました。 しかし、実際にコードを書いてみると、上記のコードはコンパイルが通ります。(代入時にアンボクシングされているということでしょうか) テキストはJava2 Platform5.0のものなので、Java SE6で何かしら仕様が変更されているのかと思ったのですが、どなたか詳しい方、解説をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.1

SE5でも > int i = Integer.valueOf("10"); は問題なくコンパイルできる。 質問者の推測どおり、代入前に自動アンボクシングされている。 SE5でコンパイルしても6でコンパイルしても同じバイトコードが生成される。 Integer#valueOfを呼びInteger#intValueでintに変換した後代入される。 自動アンボクシングはSE5で導入された文法であり、 質問のようなコードがSE5でコンパイルできないということは聞いたことがない。 単にテキストを書いた人の誤認識と思う。 わざわざ無駄に一時的なIntegerインスタンスを生成して変換するくらいなら、 int i = Integer.parseInt("10"); で直接intにした方がすっきりするとは思うが、まあこれは別の話。

sidebeach
質問者

お礼

回答を受けてテキストの出版元webサイトから正誤表を確認したところ、ご指摘のとおりテキストの誤りだったようで、修正が載っていました。どうもありがとうございます。

関連するQ&A

専門家に質問してみよう