字符串比较为什么要用equals而不用==

1、String str = "test";以这种方式赋值时,JVM会先从字符串实例池中查询是否存在"test"这个对象,如果存在,直接把实例池中"test"的地址返回给str。如果不存在,则会在实例池中创建"test"对象,并把该对象的地址返回给str。

2、String str = new String("test"); 以这种方式赋值时,JVM会先从字符串实例池中查询是否存在"test"这个对象,若不存在则会在实例池中创建"test"对象,同时在堆中创建"test"这个对象,然后将堆中的这个对象的地址返回赋给引用str。

若实例池存在则直接在堆中创建"test"这个对象,然后将堆中的这个对象的地址返回赋给引用str。

3、 == 是比较两个变量得地址

4、Object.equals() 也是通过==比较两个变量得地址,但是String重写了equals,增加了对比字符。

5、因为 String str = "test"; 和 String str = new String("test");  地址不一样,直接使用 == 比较会出现问题。 

posted @ 2021-01-06 15:27  year12  阅读(664)  评论(0编辑  收藏  举报