Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Javaにおけるデータ転送 | 深層Java構造
Javaクラスとコアメカニクス

bookJavaにおけるデータ転送

メニューを表示するにはスワイプしてください

Javaにおける情報の伝達方法

前のコースで、メモリにはスタックヒープの2種類があることを学びました。 これら2つのメモリ領域にデータがどのように保存されるかを見ていきましょう:

Main.java

Main.java

copy
123456789
package com.example; public class Main { public static void main(String[] args) { String number = new String("170"); String word = new String("word"); int poolNumber = -4; } }

__3__種類の異なる変数を作成しました。下記の図は、それらがメモリ内でどのように、どこに保存されるかを示しています:

図で観察した内容を確認しましょう:

  • スタックメモリ内の String フィールドは、ヒープメモリ内の値へのリンクです。この方法により、毎回ヒープメモリに直接アクセスする必要がありません。代わりに、最初にスタックメモリ内のリンクにアクセスし、これはヒープメモリにアクセスするよりも高速です。String Pool のトピックで値へのリンクにすでに触れています;
  • intヒープメモリには保存されず、その値は直接スタックメモリに保存されます。これはすべてのプリミティブ型(byteshortintlongfloatdoubleboolean)に当てはまります。したがって、プリミティブ型はJavaでは値渡しです。ただし、String はプリミティブ型ではないため、その値はヒープメモリに保存されます;
  • 新しいリンクごとにヒープメモリに新しいオブジェクトが作成されます。ただし、同じ型の2つの変数が同じ値を持つ場合、それらはヒープメモリ内の同じオブジェクトを参照します;
  • Integer Pool は、スタックメモリ内で -128 から 127 までのすべての整数値がリンクされている領域です。この最適化は、Javaで数値処理のパフォーマンスを向上させるために行われており、この範囲の数値はよく使用されます。スタックメモリはヒープメモリよりも高速に動作するため、Integer Pool により高速な応答が得られます;
  • String Pool は、ヒープメモリ内で同一の文字列値が保存されている領域です。

結論

Java では、すべてが値渡しです。オブジェクトの場合、参照のコピーが渡されますが、実際のオブジェクトはヒープ内にそのまま残ります(String のようにイミュータブルな場合)。

スタック内の変数は、ヒープにあるオブジェクトへの参照を保存します。これは String を含むすべての参照型に当てはまります。

1. JavaにおけるInteger Poolとは何ですか?

2. Javaではデータは参照渡しですか、それとも値渡しですか?

question mark

JavaにおけるInteger Poolとは何ですか?

正しい答えを選んでください

question mark

Javaではデータは参照渡しですか、それとも値渡しですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  2
some-alt