Javaにおけるデータ転送
メニューを表示するにはスワイプしてください
Javaにおける情報の伝達方法
前のコースで、メモリにはスタックとヒープの2種類があることを学びました。 これら2つのメモリ領域にデータがどのように保存されるかを見ていきましょう:
Main.java
123456789package 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はヒープメモリには保存されず、その値は直接スタックメモリに保存されます。これはすべてのプリミティブ型(byte、short、int、long、float、double、boolean)に当てはまります。したがって、プリミティブ型はJavaでは値渡しです。ただし、Stringはプリミティブ型ではないため、その値はヒープメモリに保存されます;- 新しいリンクごとにヒープメモリに新しいオブジェクトが作成されます。ただし、同じ型の2つの変数が同じ値を持つ場合、それらはヒープメモリ内の同じオブジェクトを参照します;
- Integer Pool は、スタックメモリ内で
-128から127までのすべての整数値がリンクされている領域です。この最適化は、Javaで数値処理のパフォーマンスを向上させるために行われており、この範囲の数値はよく使用されます。スタックメモリはヒープメモリよりも高速に動作するため、Integer Pool により高速な応答が得られます; - String Pool は、ヒープメモリ内で同一の文字列値が保存されている領域です。
結論
Java では、すべてが値渡しです。オブジェクトの場合、参照のコピーが渡されますが、実際のオブジェクトはヒープ内にそのまま残ります(String のようにイミュータブルな場合)。
スタック内の変数は、ヒープにあるオブジェクトへの参照を保存します。これは String を含むすべての参照型に当てはまります。
1. JavaにおけるInteger Poolとは何ですか?
2. Javaではデータは参照渡しですか、それとも値渡しですか?
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 2
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 2