String s1 = new String("abc");
String s2 = "abc";
这俩有啥区别?
第一个创建了俩对象,第二个创建了一个对象。
第一个先new了一个堆栈对象,然后再在常量池里放abc,相当于创建了abc这个对象
第二个直接在常量池里面操作。要放入abc,jvm没有那么傻,它会先检查一下里面有没有abc,这个例子s1不是弄了个abc,所以jvm认为s2,你这个在栈里面的变量直接给你一个饮用值,这个值指向了常量池中已经有的abc。
String s1 = new String("abc");
String s2 = "abc";
这俩有啥区别?
第一个创建了俩对象,第二个创建了一个对象。
第一个先new了一个堆栈对象,然后再在常量池里放abc,相当于创建了abc这个对象
第二个直接在常量池里面操作。要放入abc,jvm没有那么傻,它会先检查一下里面有没有abc,这个例子s1不是弄了个abc,所以jvm认为s2,你这个在栈里面的变量直接给你一个饮用值,这个值指向了常量池中已经有的abc。