質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1082閲覧

Javaのラッパークラスについての質問です

java_biginner

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2019/05/03 22:37

編集2019/05/03 23:13

[Java本格入門]という本を読みながら勉強しているのですが、
p70のラッパークラスの説明でつまづいてしまったので質問させていただきます。

本には下記のような旨が書かれています

//-------------------------------------------------------------------------------------------------
「プリミティブ型からラッパークラス型への変換にはコンストラクタを利用する方法もありますが、
コンストラクタを使用した場合には必ず新たなオブジェクトが生成されるので、
-128から127までの範囲であれば事前に生成されたオブジェクトを利用できるvalueOfメソッド
を使うとメモリを余計に使用せずにすみます。」

Integer num01 = new Integer(10); //新たなオブジェクトを生成するので効率が悪い
Integer num01 = Integer.valueOf(10); //キャッシュされたオブジェクトを返す

//-------------------------------------------------------------------------------------------------

私は「インスタンスを作成している1行目ではInteger型の変数にIntegerクラスの大きさ分メモリを確保してしまうが、
2行目ではInteger型の変数に10がはいるだけのメモリの確保ですむからvalueOfしたほうが効率がよいのかな」とまず考えましたが
「でも左辺でInteger型で宣言した以上Integerクラスぶんのメモリは確保しているか・・・」とも思っています。

頭の中がこんがらがったまま書いたためわかりづらい質問かと思いますが、なぜnewするよりstaticなvalueOfメソッドを呼び出したほうがよいのか
また、私はどういう知識が足りてないからここで躓いたのかアドバイスよろしくお願いします

※追記
先ほど朝食をとった後に再度考えました。
参照型変数はメモリの番地?格納位置?を示しているという考え方から
newしてインスタンスを生成するとわざわざメモリ上に新しく場所をとり、その場所の番号を格納しますが
すでにキャッシュにある-128から128ならそのキャッシュの番号の情報を格納するだけでよいというのはどうでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「キャッシュ」の意味は分かりますでしょうか。端的に言うなら、以前作ったものの保管場所です。
Integerオブジェクトは1度作成したら中身が変わることはないので、前に10を表すオブジェクトを作っていればそれを再利用することが出来ます。再利用しようとするのがstaticメソッドなのです。コンストラクタの場合は、前に作っていようがいまいが新しいオブジェクトを作ってしまうのです。

投稿2019/05/04 02:29

編集2019/05/04 02:30
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

java_biginner

2019/05/04 02:54

情報処理の試験でキャッシュは度々出てくるのでニュアンスとして保管場所というのは大丈夫です! staticは授業でも軽く触れただけで理解にまで及んでいないため、 "Integerオブジェクトは1度作成したら中身が変わることはないので、前に10を表すオブジェクトを作っていればそれを再利用することが出来ます。再利用しようとするのがstaticメソッドなのです。" とかかれると疑問符が並んでしまいます(笑 今現在本を読みすすめている途中で、後に解決するとは思いますがまた詰まり考えても結論があいまいなときはまた教えていただけるとうれしいです!
guest

0

細かいことですが「参照型変数」というのは(オブジェクト変数の事と思いますが), 「C 言語のポインタ」のように思えて違和感があります. オブジェクト変数の実装表現が参照("メモリの番地")なだけと理解しています.

newしてインスタンスを生成するとわざわざメモリ上に新しく場所をとり、その場所の番号を格納しますが

すでにキャッシュにある-128から128ならそのキャッシュの番号の情報を格納するだけでよいというのはどうでしょうか?

「番号」を「参照」と変えれば, 合っていると思います.

投稿2019/05/04 01:51

編集2019/05/04 05:12
jimbe

総合スコア12632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/04 02:25

-128 ~ 127 じゃね
jimbe

2019/05/04 02:29

確かに...ありがとうございます.
swordone

2019/05/04 02:42

いや「参照型変数」は「ある」でいいんじゃないの?
java_biginner

2019/05/04 02:47

みなさま回答・助言ありがとうございます 本格入門によると変数の種類を プリミティブ型と参照型の二つに分類していたため 参照型変数と表現しましたが、そうなるとプリミティブ型は参照を持っていないのでしょうか? これも新しく疑問になりました調べてみます! ちょっとした∧深いところまで知ることができるのも有識者の皆様のおかげですありがとうございます
jimbe

2019/05/04 05:07

個人的なイメージが宣言的になってしまいました. 修正致します. 失礼しました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問