java 入池问题怎么解决!!!!!!!!!!

String stri="hfeigehgiergh".intern();
String st=“hfeigehgiergh”;
System.out.println(st==stri);
为什么是true 它的原理是什么

String s="hfeigehgiergh";
String stri="hfeigehgiergh".intern();
String st="hfeigehgiergh";
System.out.println(s==st);
System.out.println(st==stri);
你先确定s==st是true吗,string跟普通的引用类型有点不同,它的值不是放在堆里面的,而是放在常量池里面的,当str在常量池里面存储了一份值之后,第二次有个字符串赋值,它会先到常量池里面找下有没有相同的值,有就不会添加,会直接使用这个值,没有就新添加一个,因此2个字符串其实是指向同一个值,所以是true,你.intern()这个方法就是告诉字符串先去常量池里面找下有没有这个值,其实加不加都会先去找一遍。

自己查看intern方法的API。
前者会去池中找是否有相同的,有就直接返回引用,没有就放到池中,然后返回引用。
后者直接去池中找,找到了返回引用。
所以结果肯定为TRUE

享元模式,避免对象重复创建扩大内存开销,intern()会去常量池中查看是否已经new出来,如果有则返回一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。