javap クラスファイルの確認
詳細に見るために javap -vのオプションをつける
String a = "sample"
String b = "sample"
定数化されコンスタントプールに保存されて使いまわしが行われる
コンスタントプールに入っているかの確認
+補足
よく使われる値/文字列リテラルなどはメモリを無駄にしないために使い回しをしようとする
コンパイルするとコンスタントプールにロードが行われる
IntegerクラスやDoubleなどのラッパークラスも同じような仕掛けを持っている
var a = new String("apple")
var b = new String("apple")では
定数化されず同じ文字列でも使い回しは行われない
上の画像を見てわかるようにappleは別の場所にいる
ここにいた
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
}
}
Integerだと−127~127まではコンスタントプールに入り
128からは入らない