• ベストアンサー

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

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

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • クラスやメソッドが理解できません

    今javaを勉強中なのですが、クラスやメソッドで生きず待ってしまいました。 メソッドの定義は 戻り値の型 メソッド名(引数リスト) {  文;  ・・・ return 式;  } ですが、メソッドから返されえる値を戻り値といますよね?呼び出し元に値を返すってどういうことなのでしょうか? int getNum() { System.out.println("調べました") return num; } たとえば、上記のようなものですが。もしも、このメソッドを呼び出すと、”戻り値”が戻ってくるわけですが、これはgetNumという変数のなかに計算式が入っている?という考え方でいいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • クラスメソッドの問題

    春から情報系の大学に行くためjavaについて勉強しているのですが分からない問題が出てきたので質問します。 問題 1からnまでの奇数の和を求めるプログラムsumple.javaと和を計算するためのクラスメソッドSum及び結果を表示するためのクラスメソッドdisplayを用いて作成する。 Sumの戻り値と因数はともにint型とする。 なおdisplayの戻り値はvoid型、因数はint型が2つとする。 nの入力はコマンドライン引数を利用する 実行例 $ java sumple.java コマンドライン引数がありません! $ java sumple.java 100 1から100までの奇数の和は2500です。 このようになるのですがそのように作ればよいか全然わかりません。 回答お願いします

  • 計算クラスのメソッドについて

    <問題> Mainクラス mainメソッド 1)実行時に引数を2つ付けて実行する。(数字) 2)計算クラスのオブジェクトを生成。 3)argsの0番目と1番目から値を取得し、int型に変換する。 4)int型に変換した値2つを引数として、計算クラスの足し算メソ   ッドを実行し、戻り値を取得して表示する。 計算クラス 足し算メソッド(引数=int,int) 1)int型の数字を引数として2つ受け取る。 2)二つの引数の値を足し算する。 3)計算した値を戻り値とする。 *********************************************************** 上記の問題についての質問です。 最初mathくらすのメソッドを使うのかと思ったのですが、 足し算を計算するようなメソッドが無かったのでネットで検索 して見つけたcalcAdd()というメソッドを使って記述してみました。 でも「シンボルを見つけられません」のエラーが出てコンパイル 出来ないし、メソッドの使い方も違うような気がするので、 分かる方正しい記述の仕方を教えてください。 package siryou; class Keisan { int cal; int cul; public int tashizan(int a, int u) { cal = a; cul = u; int kekka = (Integer)calcAdd(cal, cul, 0); return kekka; } } class TashiHikiKakeWari { public static void main(String args[]) { Keisan ki = new Keisan(); String str1 = args[0]; String str2 = args[1]; int res1 = Integer.parseInt(str1); int res2 = Integer.parseInt(str2); ki.tashizan(res1, res2); int kekka = ki.tashizan(res1, res2); System.out.println(kekka); } } ************************************************************ calcAdd()メソッドの呼び出し方も間違っている気がするのですが、 そもそもこのメソッドって呼び出せば自動的に計算されるように なっているのですか? それとも足し算を計算する記述は別にしなければならないのでしょうか?

    • ベストアンサー
    • Java
  • 戻り値の異なるメソッドの多重定義はできないのですか?

     戻り値の異なるメソッドの多重定義はできないものでしょうか?  例えば、Integer型の戻り値を持つメソッドHogeを持つクラスClass1があるとします。 public Class1{ ・・・  public Integer Hoge(){ ・・・ }     ・・・ } これを継承したクラスClass2を作ります。 public Class2 extend Class1{ ・・・ public int Hoge(){ Integer buf = this.Hoge(); int buf2 = buf.intvalue(); }   ・・・ }  私の環境ではエラーとなって実行できませんでしたが、 こういったことはできないものなのでしょうか?  やりたいことは、(Javaのライブラリに含まれている)Integer型を持つメソッドを他のクラスから使用できるようにするためにint型に変換することなんですが、他のクラスの変更は一切しないで、この部分を書き換える(アダプタパターンを使う)ことによって実現したいと考えています。  他に良い方法はあるでしょうか?宜しければ、アドバイスお願いします。  

    • ベストアンサー
    • Java
  • 自分で作ったクラスのメソッドから、配列が返ってこない

    こんばんは。 自分で作ったクラスのメソッドで、戻り値が配列のメソッドがあります。そのメソッドをメインプログラムから呼び出しても、値が入っていません。(空の配列が返ってくるのか、配列が返されているのかも分かりません)実行時エラーは以下の通りです。 Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:23) ソースコードは以下の通りです。 以下はメインプログラム // 自分で作成したクラスを使用しています DataProperty dp = new DataProperty( args[0] ); // ここで配列に値を入れています。 int[] intByteSize = dp.getByteSize(); System.out.println( intByteSize[0] ); 以下は自分で作ったプログラムです。 public int[] getByteSize() { if( fileNumber.equals("2004") ) { int[] intByteSize = { 8, 1, 5, 50, 8, 1, 15, 15, 3, 3, 8, 8, 11, 9, 7, 7, 1 }; return intByteSize; } 本などを見ても、構文的に間違いはないと思うんですが。。 だれか、原因の思いつく方は解答をください。よろしくお願いします。

    • ベストアンサー
    • Java
  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • Javaの初期化メソッドについて

    こんにちは。Javaの初心者です。 Javaの初期化メソッド(initメソッド)についてなのですが、処理を記述しても実行してくれません。 恐らく使い方が間違ってるかと思われるのですが、ネットで調べてもあまり検索結果がでてこなかったので、質問させてもらいました。 以下サンプルコード import java.lang.*; public class Test { static int a; public void init() { a = 10; } public static void main(String[] args) { System.out.println(a); } } 実行してみても、「0」と表示されるだけで、「10」と表示してくれませんでした。 どこかコードが間違えてるのでしょうか? それとも初期化メソッドはアプレット用であってアプレットで使わないと意味がないというものなのでしょうか? 因みに関係ないかと思われますが、グローバル変数は自動的に初期化される(0が代入される)ということは知っています。 ご教授の方、よろしくお願い致します。

    • ベストアンサー
    • Java
  • クラス変数について質問

    Javaのオブジェクト指向を解説した参考書で現在勉強しているのですが、その参考書のある問題の答えの解説として「クラス変数は参照変数なので参照以外を代入できません」と書いてありました。 でも、例えば、static int n=0と書けば、0をnに代入できます。 因みに、「クラス型の変数」は参照しか代入できないのはわかっています。 よって「クラス変数」は誤植で、正しくは「クラス型変数」なのでしょうか?

    • ベストアンサー
    • Java
  • ラッパークラスのオブジェクト作成について教えてください。

    ラッパークラスのオブジェクト作成について教えてください。 ラッパークラスのオブジェクト作成には ・new演算子を使ってインスタンス化する方法 ・ラッパークラスのstaticメソッドを呼び出す方法 の2つの方法があると書籍に書いてありました。(SJC-Pのテキストです) では Integer i = 1000; のような記述はどうでしょうか? Integerはintのラッパークラスと思うのですが、iはインスタンスじゃないという事でしょうか?

    • ベストアンサー
    • Java
  • mainメソッドに関して

    こんばんは。宜しくお願いします。 例えば2つのファイルhello.javaとtnk.javaがあった とき hello.java⇒HL.class(デフォルト)、mainメソッド(1) tnk.java⇒tnk.class(public)(2) の構成をとっているとします。 このHL.classのmainメソッドから、tnk.classの何か メソッド(public)を呼んで実行するとします。 このときに、tnk.classはHL.classとは別ファイルです からpublicでなくてはいけないのは分かります。 ですが、始まりであるmainメソッドを持つクラスは デフォルトでもよいのはどうしてなのか悩んで います。 (因みに、hello.javaのHL.classをHello.javaとして コンパイル・実行すると、wrong nameとエラーが出、 hello.javaのmainメソッドを持つクラスを一端 public class hello としてコンパイル・実行して やらないと、(1)に戻しても正常に実行できなくなる のも不思議です) 仕様と言ってしまったらそうかもしれませんが、 ご存知の方がおりましたら、ご教授くださいますよう お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう