常量池:用于管理在编译期被确定并保存在已编译的.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根本就不一样,因为对象存在堆中
}
}