踏踏实实积累,不要浮躁!!!
1:关于 String 类的 equals() 方法
public static void main(String[] args) {
String s1 = "aa";
String s2 = "aa";
System.out.println(s1.equals(s2));
String s3 = new String("aa");
String s4 = new String("aa");
System.out.println(s3.equals(s4));
System.out.println(s1.equals(s3));
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1.equals(o2));
}
运行结果如下
说明: Object 类源代码中的 equals方法比较的是 引用变量的 地址 String类重写了 equals方法,比较的是 内容,下面的源码中是按照字符来进行比较的, String里面的 value 局部变量 是用的 char[] 数组来存储,所有下面equals代码中是 逐个比较字符是否相等
2:关于 常量池的概念
String常量,会被缓存在 JVM的方法区中
String h1 = "Hello";
String h2 = "He" + "llo";
String h3 = new String("He") + "llo";
System.out.println(h1 == h2); // true
System.out.println(h1 == h3); // false
说明:
1:因为 h2 是两个字面量进行拼接,这种操作会被编译器优化 最后指向的还是 方法区中常量池中 h1指向的字符串
2:通过New关键字创建的 String 对象会在堆上分配空间,跟常量池中的字符串地址不相同