前面我们说到字符串比较中,equals()是逐位比较字符串内容是否完全一致,而==比较的是内存地址,也就是比较是否为同一对象。那字符串对象是如何创建的呢?
Java虚拟机将内存分为了栈和堆,因为字符串太高频使用了,所以内存专门开辟出一块区域来存放高频使用的字符串,我们就先叫它字符串池。
也就是说String a=“hello”,先去字符串池里找有没有hello字符串,有就直接用,没有就在字符串池里创建一个并调用;
而String a=new String(“hello”),先在堆里创建一个hello,再去字符串池里找,有就算了,没有就在池里再创建一个,此时指向的是堆里的hello。