equals()方法的问题

来源:9-9 Java 中的 Object 类 Ⅱ

魏龙虎e

2015-10-22 19:55

之前做过比较两个String类型的值时

比如:

String str1="你好";

String str2="你"+"好";

String str3="你";

String str4="好";

String str5=str3+str4;

System.out.println(str1.equals(str2));

System.out.println(str1.equals(str5));

为什么这两个句子返回的都是true啊,不是说好的比较地址的吗?有疑惑啊

写回答 关注

2回答

  • scau_zero
    2015-10-22 22:45:06

    子木李 说得对,楼主还可以尝试去建立一个类的两个实例,内部变量完全一样,但是你用equals去比较时,返回的是false,这就会验证你理解中的两个对象使用 equals 是进行地址比较;但是你会发现两个String,哪怕是通过new String()得到的(理论上是两个对象),你会发现执行 equals 操作会获得 true, 这是因为java字符池机制的作用,关于这个可以推荐楼主看下 “JAVA 字符池”,这个应该可以帮到楼主;

    另外补充一些我知道的相关的一知半解:String对象是不可改变的,比如说String str1 = new String("hello"); 然后你让 str1 = "java"; 你会发现str1只是改变了自身引用,对其之前的内容 “hello” 串并不会有改变;


  • 子木李
    2015-10-22 20:12:28

    string类型的equals方法的规则是这样的:如果两个对象的类型一致,并且内容一致,则返回true,楼主理解的比较地址也是正确的,不过java的String类的机制是:对于String实例,运行时状态会尽可能地确保任意两个具有相同字符信息的String字面值指向同一个内部对象,即是如果字面值一样,那么它们其实是同一个地址,所以,返回的是true,str1、str2、str5都是“你好”

    羽丶 回复子木李

    恩,谢了!

    2015-11-10 16:14:19

    共 4 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530652 学习 · 6091 问题

查看课程

相似问题