java中的String为什么可以使用==比较字符串内容?

一句话概括:

java中的String是final类,final类是共享数据的,而java中==比较的是内存地址,而final类的String相同字符串,指向的是同一个地址!

详细:

==在任何时候都是比较地址,这种比较永远不会被覆盖。

java中的String类是final类,final修饰类,被final修饰的类将不能被继承。final类中的方法也都是final的。

对象一旦创建属性就不会改变,不变模式可以实现对象的共享(可以用一个对象实例赋值给多个对象变量)

池化的思想,把需要共享的数据放在池中(节省空间,共享数据)只有String类可以用“”中的字面值创建对象。在String类中,以字面值创建时,会到Java方法空间的串池空间中去查找,如果有就返回串池中字符串的地址,并把这个地址付给对象变量。如果没有则会在串池里创建一个字符串对象,并返回其地址付购对象变量,当另一个以字面值创建对象时则会重复上述过程。
如果是new在堆空间中创建String类的对象,则不会有上述的过程(String做字符串连接效率低原因)。

所以相同字符串在内存是同一个对象,一个永不变的对象!

原文地址:https://www.cnblogs.com/syxchina/p/2197212.html