• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaの不思議)

Javaの不思議

このQ&Aのポイント
  • Javaでの型変換についての不思議な挙動について質問です。
  • C言語と比べてJavaの型変換方法について不思議に思っています。
  • JavaのIntegerクラスのdoubleValueメソッドについて疑問があります。

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

  • ベストアンサー
  • public_sa
  • ベストアンサー率52% (13/25)
回答No.5

前の回答にもあるようにInteger#doubleValueは キャストではありません が。 実際にJavaのJDKのライブラリでは キャストを行っているだけです。 なら尚更不思議と思ったかも知れませんが、 これがJDKユーザのユーザビリティを考慮したものだとしたら如何でしょうか? (それが邪魔くさいというのであればその機能を使わなければ良いだけの話ですし、 Javaを使わなければ良いだけの話です。) ですが結キャストにおけるビット0ビット追加も、 ダウンキャストにおけるビットの抜き出しも ほぼ同じアルゴリズムだと思います だからこそユーザが言語を選択すればよいと思います。

すると、全ての回答が全文表示されます。

その他の回答 (5)

回答No.6

ひょっよして int と Integer をごっちゃにしているとか? Integer ならメソッド呼び出しが自然だと思います。 #クラスで普通キャストはしない。

すると、全ての回答が全文表示されます。
  • root139
  • ベストアンサー率60% (488/809)
回答No.4

まず、念のために確認ですが、JavaでもCと同じ様な構文でキャストは出来ます。 例) ------------------------------------ int intVal1 = 30; double dblVal1 = intVal1; // 暗黙のキャスト double dblVal2 = (double) intVal1; // 明示的なキャスト int intVal2 = (int) dblVal1; // double → int は明示的なキャストのみ化 ---------------------------------------- > Integer value = new Integer(30); > value.doubleValue() // <- double型に変換している int を double に変換するだけならこのような書き方はあまりしないと思います。(キャストで十分なので) 元々Integer型のオブジェクトが有った場合には、このように doubleValue() で取出すのが自然でしょう。 また、オートボクシング/アンボクシングが導入されたJava5.0からは、Integer型を double にキャストするかのごとくに書くことも出来ます。 あまりお勧めはしませんが。 例) ------------------------------------ Integer objInt = Integer.valueOf(30); double dblVal = objInt; ---------------------------------------- 上記の処理はコンパイル時に↓のように書き換えられています。 double dblVal = (double) objInt.intValue();

参考URL:
http://www.techscore.com/tech/Java/JavaIntro/3-2/#jin3-3
すると、全ての回答が全文表示されます。
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.3

> この2つの方法が自然な型変換だと思うのですが、変でしょうか? まず、doubleValue() は「型変換」ではありません。ただのメソッド呼び出しです。 上記のサンプルは例のための例なので、コード自体を検討する価値はありません。 toString() も「型変換」ではなくメソッド呼び出しです。 キャストの構文は別でありますが、推奨されません。そもそもキャストが不要になるようにコーディングしましょう。

すると、全ての回答が全文表示されます。
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

valueはIntegerクラスのインスタンスなので、値を求めるなら、オブジェクトにメッセージdoubleValue()を送信するのがオブジェクト指向プログラミング的に自然かと。 変だなと思う気持ちもわからないでもないですが。

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

Cは少し忘れることです。 Intergerとintは違います。 intはCのintと同じでただの整数です。メソッドはありません。 Integerはクラスです。メソッドやフィールドがあったりします。 Cでも struct Integer{int v;} value = {30}; double d = (double)value ; なんてことはしませんよね?(よっぽどの事情が無いかぎり) > value.doubleValue() // <- double型に変換している 変換はしていません。valueが持っている整数の値をdoubleとして返しているだけです。 > メソッドに投げる(Integer.toString←stringにする例ですが)。 と同じです。 http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Integer.html#doubleValue()

すると、全ての回答が全文表示されます。

関連するQ&A