帮楼主分析一下,这个也是经常要考的面试题,字符串常量池概念是一种设计模式,貌似是享元模式。举个例子:你知道word文档不?如果你写在word文档里的内容都在内存中创建的话,很快就会出现内存泄露的,那么怎么解决这个问题呢?开发人员就想,英文不就26个字母吗?我就让你在内存里创建26个这样的小对象,你调用它们的时候只要给他们加个各自的属性就行了,这个属性就是x、y坐标。即在word文档里显示的位置是不同的。
这样理解字符串也可以很好的理解了,如果你每创建一个字符串,内存都要给你分配空间去装他们,那么当数据量很大时(处理大量字符串以后是常有的事),内存很快就会溢出。那么如何解决呢,java的开发人员想到,你存进来的字符串无非是由一些字符组成的,那么我存只存字符,并给这些字符加上角标属性(这也是为什么字符串有角标属性的原因),当你存进另外一个字符串的时候,我存只存我没有的字符,有了我就不存了。显示的时候只要按照你记住的索引位置去掉这些字符就哦了。但是你通过String s = new String("ysdf");这样的方式创建字符,我识别不了,就会直接把你作为一个字符串来处理。这里面是两个对象。