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

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

ただいまの
回答率

88.79%

intやfloatやboolean型はなんでnewしなくても使えるのですか?

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 500

foxhoge

score 15

本で読んだのですが、Stringクラスは特例としてインスタンスを生成しなくても使えると書いてあります。
intやfloatやboolean型もnewしなくても使えますよね?
なぜ使えるのですか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2019/05/06 19:34

    なぜ使えるか? 

    結論だけをいうと「そういう言語仕様だから」

    という回答しかできない気がするが

    キャンセル

  • quickquip

    2019/05/06 20:06

    文章を読み間違えている可能性の方が高いと思うので正確な引用が欲しいですね。

    キャンセル

  • otn

    2019/05/06 20:36

    「newしなくても使える」とは具体的にどういうコードのことを言っていますか?
    逆の「newしないと使えない」というのがあるなら、それは具体的にどういうコードのことを言っていますか?

    キャンセル

回答 3

+1

プリミティブ型だからです。(Stringは参照型)

Stringクラスは特例としてインスタンスを生成しなくても使えると書いてあります。

「インスタンスを生成しなくても」ではなく、「newしなくても」の間違いでしょうか?
Stringは使用頻度が高いため、newを使わないインスタンス生成方法が定められているだけです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/06 15:19

    String リテラルをなぜ new しなくても使えるのか?は説明しなくてもいいですか?
    プリミティブ型だからは、説明になっていますか?

    キャンセル

  • 2019/05/09 11:20

    その説明だと以下はできないことになる

    Integer a = 1;
    Long b = 2L;
    Float c = 3F;
    Double d = 4D;

    etc...

    キャンセル

  • 2019/05/09 11:27

    「intやfloatやboolean型がnewせず使えるのはなぜなのか」という問いに対して「プリミティブ型であるから」という回答は間違ってないですよね?
    つまり「プリミティブ型である」⇒「newせず使える」と言ってるだけで、「newせず使える」⇒「プリミティブ型である」とは言っていない

    キャンセル

0

swordoneさんの回答の補足として・・・

Stringクラスは特例としてインスタンスを生成しなくても使えると書いてあります。

その本は、間違ったことが書いてあるようですね。。。(質問者さんの言う通りなら)

javadocにもきちんと

Stringクラスは文字列を表します。Javaプログラム内の"abc"などのリテラル文字列はすべて、このクラスのインスタンスとして実行されます。

インスタンスとして実行されると書いてあります。
newをしなくても使えるなら、まぁStringに限らずインスタンスを生成するのにnewを使わなくてもできます。

ちなみに文字列リテラルは

String#internにあるとおりです。

すべてのリテラル文字列および文字列値定数式が保持されます。文字列リテラルは、『Java(tm)言語仕様』のセクション3.10.5で定義されています。

よく文字列はequalsで比較しないといけませんとありますが、
※これ自体は、その通りなので以下を見ても==で比較してはダメです

実際に==で比較してもtrueになります。
Stringをnewしてはいけない理由は同じ文字列を違う領域に作成する=メモリの無駄使い
というのもわかると思います。

String abc  = "abc";
String abc2 = "abc";
String abcNew    = new String("abc");
String abcIntern = new String("abc").intern();
String abcIntern2 = "a" + "b" + "c";

System.out.println(abc == abcNew);    // false
System.out.println(abc == abcIntern);    // true
System.out.println(abc == abcIntern2);    // true
System.out.println(abc == abc2);    // true

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/09 10:59

    ようは「そういう言語仕様だから」なんですけどね。

    キャンセル

0

Java の型は二種類あることはご存じですね。

  • プリミティヴ型 (boolean, byte, char, short, int, long, float, double)
    プリミティヴ型変数には、算術演算する「値」を直接格納する。
  • 参照型 (配列、String、その他のクラス)
    参照型変数には「参照(算術演算できないある整数)」を格納する。参照は、別の場所(ヒープ)にあるインスタンスを指す。

プリミティヴ型は「インスタンス化」しない(できない)が、参照型は「インスタンス化」(new) しなければ本体が作られない。インスタンス化しなければ null である。

参考資料をご覧になってください。参照型とプリミティブ型

本で読んだのですが、Stringクラスは特例としてインスタンスを生成しなくても使えると書いてあります。

String リテラルは、new しなくても、あらかじめインスタンスが作られていて、リテラルを使用した時にヒープに登録され、一元管理されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る