java中String类
如果为一个String的变量赋值一个直接量,那么这个直接量就会放入常量池里面。也就是说在编译的时候能确定的字符串都会放入常量池里面。
package frank; public class App { public static void main(String[] args) { String s = "123";//放入常量池 System.out.println(s.hashCode()); String s2 = "1"+"2"+"3";//如果常量池里面存在就会指向那个对象 System.out.println(s2.hashCode()); String s3 = "1"; String s5 = "23"; String s4 = s3+ s5;//在编译的时候不能确定值 String s6 = s3 + "23";//在在编译的时候不能确定值 System.out.println(s4.hashCode()); System.out.println(s == s4);//false System.out.println(s == s2);//true System.out.println(s == s6);//false } }
当为String类型的变量直接赋值一个常量的时候,首先会去常量池里面找,如果发现有当前要赋值的值,就会直接指向之前的值,如果没有就会把新值放入常量池中。