String类的equals和==和hashcode

时间:2021-02-01 16:05:10

String s1 = new String("abc");

String s2 = "abc";

这俩有啥区别?

第一个创建了俩对象,第二个创建了一个对象。

第一个先new了一个堆栈对象,然后再在常量池里放abc,相当于创建了abc这个对象

第二个直接在常量池里面操作。要放入abc,jvm没有那么傻,它会先检查一下里面有没有abc,这个例子s1不是弄了个abc,所以jvm认为s2,你这个在栈里面的变量直接给你一个饮用值,这个值指向了常量池中已经有的abc。