0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クラスファイル内 コンスタントプールの動きString&Integer

Last updated at Posted at 2021-04-14

javap クラスファイルの確認

詳細に見るために javap -vのオプションをつけるスクリーンショット 2021-04-14 13.13.12.png

Equals2.classの中身をみるスクリーンショット 2021-04-14 13.14.57.png

コンスタントプールの確認スクリーンショット 2021-04-14 13.18.23.png

String a = "sample"
String b = "sample"

定数化されコンスタントプールに保存されて使いまわしが行われる
コンスタントプールに入っているかの確認

スクリーンショット 2021-04-14 13.24.28.png

スクリーンショット 2021-04-14 13.48.04.png

+補足

よく使われる値/文字列リテラルなどはメモリを無駄にしないために使い回しをしようとする
コンパイルするとコンスタントプールにロードが行われる
IntegerクラスやDoubleなどのラッパークラスも同じような仕掛けを持っている

var a = new String("apple")
var b = new String("apple")では
定数化されず同じ文字列でも使い回しは行われない
上の画像を見てわかるようにappleは別の場所にいる
ここにいた
スクリーンショット 2021-04-14 13.25.48.png

Main3_12.java

package chap3;

public class Main3_12 {

	public static void main(String[] args) {
		var a = "sample";
		var b = "sample";
		System.out.println( a == b);
		System.out.println(", ");
		System.out.println(a.equals(b));

		//これだと違う番地になるので==はfalseになる
		var x = new String("apple");
		var z = new String("apple");

		System.out.println(x == z);//false同じアドレスにはいないけど内容は同じだよねってこと
		System.out.println(x.equals(z));//true
	}

}


スクリーンショット 2021-04-14 13.44.32.png

Integerだと−127~127まではコンスタントプールに入り
128からは入らない

スクリーンショット 2021-04-14 13.46.18.png

使い回しをしていく仕掛けがコンパイラーに備わっている

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?