String中的equals和==

来源:互联网 发布:java发送图片 编辑:程序博客网 时间:2024/06/05 06:43

    初学java,在比较string的值是否相等的时候,发现与c++中不同的地方。与c++中直接使用==来比较不同,java使用string.equals来比较字符串是否相等。equals比较的是字符串的值是否相等,==则比较对象的内存地址是否相等。在学习过程中发现诸如下列代码:

String  s1 = “apple”;

String s2 = "apple";   

这样声明的话,无论使用==还是equals,返回的结果都是true,这说明变量s1和s2不管是内存地址还是值都是相等的,这是由于变量是维护在常量池之中的,这里让我产生疑惑,为什么变量(c++中概念)会维护在常量池中,通过查阅api文档后,发现了java中字符串是常量它在创建之后不可以修改,如下图:


这与c++中是不同的。所以string变量创建之后维护在常量池之中,在新的string  s2创建的时候,先回在常量池中寻找是否有apple这个值,经过查找发现有,就直接将s2也指向了该位置,所以才会有两种方法比较都返回true的现象。

0 0
原创粉丝点击