package stringTable;
//StringTable["a" "b" ] hashtable 结构
不能扩容
public class demo {
//常量池中的信息,都会被加载到运行时常量池中,这时 a b ab 都是常量池中的符号,还没有变为java字符串对象
//ldc #2 会把 a符号变为"a"字符串对象,"a"与StringTable中对象进行比对,若没有与它相同的对象
//它将会被放入StringTable(字符串表)中,若有它将会使用StringTable(字符串表)中的对象。
//ldc #3 会把 b符号变为"b"字符串对象,"b"与StringTable中对象进行比对,若没有与它相同的字符
//它将会被放入StringTable(字符串表)中,若有它将会使用StringTable(字符串表)中的对象。
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="a";
String s2="b";
String s5="ab";
String s3="a"+"b";//javac在编译期间的优化,结果已经在编译期间确定为ab
String s4=s1+s2;//new StringBuilder().append("a").append("b").toString() new String("ab")
String s6=s4.intern();
//问:
System.out.println(s3==s4);//s3中的对象是StringTable中的对象,s4中的对象是新创建的对象,因此他们两个不相等,打印false.
System.out.println(s3==s5);//两者在创建对象时都使用的是StringTable中的对象,因此他们两个是相等的,打印true。
System.out.println(s3==s6);
String x2=new String("c")+new String("d");
String x1="cd";
x2.intern();
//问,如果调换了【最后两行代码】位置呢?如果是JDK1.6呢?
System.out.println(x1==x2);
}
}
判断结果:false、true、true、false