常量池:用于管理在编译器被确定并报错在已编译的.CLASS的文件中的一些数据。包括常量与String常量。存在常量池中的数据是唯一的,所以2个相同的字符串常量都是常量池中的同一个常量,他们是== 相等的。
public class StringCom { public static void main(String[] args) { String s1 = "ok"; String s2 = "ok"; System.out.println((s1 == s2)); //这个是String常量,存在常量池中,所以他们都是同一字符串 String o = "o"; String s3 = "o" + "k"; System.out.println(s1 == s3); //这个是String常量所以也存在常量池中 Integer iObj = 5; Integer i1Obj = 5; System.out.println(iObj == i1Obj); //数值这个包装类存在数组中,只能存-128-127的元素 int i = 2; int i1 = 2; System.out.println(i == i1); //i 与 i1都是常量,所以他们存在常量池中 StringCom SM1 = new StringCom(); //对象SM1 StringCom SM2 = new StringCom(); //对象SM2 System.out.println(SM1); //SM1的hashcode System.out.println(SM2); //SM2的hashcode System.out.println(SM1 == SM1); System.out.println(SM1 == SM2); //他们的hashcode根本就不一样,因为对象存在堆中 } }