通过toLowercase()方法判断字符串相等,需要考虑该方法底层返回的字符串形式,我们通过一个例子来理解
toLowerCase()方法将字符串的所有字符转换为小写字母
public static void main(String[] args) {
String s1 = "hello";
String s2 = s1.toLowerCase();
System.out.println(s1 == s2);
String s3 = "Hello";
String s4 = s3.toLowerCase();
System.out.println(s3 == s4);
}
[分析]:查看toLowercase()方法的底层源码,如下图所示,当传入的字符串与转换为小写字母后的字符串相同时,返回的就是原字符串~所以输出判断时,字符串常量池已有指定的内容”hello“,直接进行引用即可,并没有开辟新的空间,所以地址相同,返回true; 另一种情况就是s3,s4这样的,传入的字符串与转换为小写字母后的字符串不同时,s3 = “Hello”, s4 = “hello”,源码中指出此时返回的是new出来的String对象,而只要是构造方法new出来的对象都是要在堆中另开辟空间的,所以两者的地址不同,返回false; 若是关于字符串常量池以及字符串什么情况下会在堆中开辟空间什么情况下可以直接引用不了解,可以参考另一篇博文,其中详细介绍了字符串窜的内存分配原理; [Java String类内存分配]
|