Java String比较

代码

@Slf4j
public class StringCompareDemo {
    public static void compare() {

        String a = "1";
        String b = "1";
        log.info("\nString a = \"1\";\n" +
                "String b = \"1\";\n" +
                "a == b ? {}", a == b); //true

        String c = new String("2");
        String d = new String("2");
        log.info("\nString c = new String(\"2\");\n" +
                "String d = new String(\"2\");" +
                "c == d ? {}", c == d); //false

        String e = new String("3").intern();
        String f = new String("3").intern();
        log.info("\nString e = new String(\"3\").intern();\n" +
                "String f = new String(\"3\").intern();\n" +
                "e == f ? {}", e == f); //true

        String g = new String("4");
        String h = new String("4");
        log.info("\nString g = new String(\"4\");\n" +
                "String h = new String(\"4\");\n" +
                "g equals h ? {}", g.equals(h)); //true
    }
}

执行结果

String a = "1";
String b = "1";
a == b ? true
----
String c = new String("2");
String d = new String("2");c == d ? false

-----
String e = new String("3").intern();
String f = new String("3").intern();
e == f ? true
---


String g = new String("4");
String h = new String("4");
g equals h ? true

分析

第一个相等,是因为 Java 的字符串驻留机制,直接使用双引号声明出来的两个 String 对象指向常量池中的相同字符串。

第二个不相等,是因为new 出来的两个 String 是不同对象,引用当然不同,所以得到 false 的结果。

第三个相等,是因为使用 String 提供的 intern 方法也会走常量池机制,所以同样能得到 true。

第四个相等,是因为string重写了equals,equals内部是比较的是字符串的值。

posted @ 2020-04-16 23:00  xuan_wu  阅读(565)  评论(0编辑  收藏  举报