日期:2014-05-19  浏览次数:20736 次

字符串比较,求解释
String s1 = "Hello";
  String s2 = "hello";
  String s3 = s1.toLowerCase();
  String s4 = s2.toLowerCase();

  System.out.println(s2 == s3);
  System.out.println(s3 == s4);
  System.out.println(s2 == s4);


false
false
true


我想问,3次引用地址的比较,为什么是false,false,true?
为什么s2和s4的地址就是相同的,而2和3,3和4就不同?


------解决方案--------------------
String s1 = "Hello";
String s2 = "hello";
String s3 = s1.toLowerCase();
String s4 = s2.toLowerCase();

System.out.println(s2 == s3);
System.out.println(s3 == s4);
System.out.println(s2 == s4);


false
false
true


我想问,3次引用地址的比较,为什么是false,false,true?
为什么s2和s4的地址就是相同的,而2和3,3和4就不同?
 
s2和s4地址相同,String s2 = "hello";String s4 = s2.toLowerCase();
查看jdk toLowerCase()方法,返回的是 return this; 所以是相同的
然而2和3 为什么不同,String s2 = "hello"; 
String s3 = s1.toLowerCase();
原因是s3是在运行期生成的新对象 return new String(0, count+resultOffset, result);
所以不同
而3和4同上