魏龙虎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啊,不是说好的比较地址的吗?有疑惑啊
子木李 说得对,楼主还可以尝试去建立一个类的两个实例,内部变量完全一样,但是你用equals去比较时,返回的是false,这就会验证你理解中的两个对象使用 equals 是进行地址比较;但是你会发现两个String,哪怕是通过new String()得到的(理论上是两个对象),你会发现执行 equals 操作会获得 true, 这是因为java字符池机制的作用,关于这个可以推荐楼主看下 “JAVA 字符池”,这个应该可以帮到楼主;
另外补充一些我知道的相关的一知半解:String对象是不可改变的,比如说String str1 = new String("hello"); 然后你让 str1 = "java"; 你会发现str1只是改变了自身引用,对其之前的内容 “hello” 串并不会有改变;
string类型的equals方法的规则是这样的:如果两个对象的类型一致,并且内容一致,则返回true,楼主理解的比较地址也是正确的,不过java的String类的机制是:对于String实例,运行时状态会尽可能地确保任意两个具有相同字符信息的String字面值指向同一个内部对象,即是如果字面值一样,那么它们其实是同一个地址,所以,返回的是true,str1、str2、str5都是“你好”
Java入门第二季 升级版
530652 学习 · 6091 问题
相似问题