美文网首页
Java-Note-String中的"=="与"equals()

Java-Note-String中的"=="与"equals()

作者: 1nfinity | 来源:发表于2018-11-19 16:03 被阅读0次
    • "=="比较的是两个引用变量是否指向同一个对象
    • "equals()"方法比较的内容是自定义的, 自己写的类可以自定义"equals()", 只是在Object/String等类中默认已经帮我们写好了, 默认的"equals"比较的是具有实际意义的值, 比如两个String的字面量是否相等
    • 对String的比较而言, 比较两个字符串字面量是否相等最好是使用"equals()", 而不是用"=="来比较两个字符串是否指向同一个对象
      • 举例说明"=="和"equals()"在String中的差别:
      public class StringEqualTest {
        public static void main(String[] args) {
            String a = "test";
            String b = "test";
            String c = new String("test");
            String d = new String("test");
            System.out.println(a == c);
            System.out.println(c == d);
            System.out.println(a == b);
            System.out.println(a.equals(c));
            System.out.println(c.equals(d));
            System.out.println(a.equals(b));
        }
      }
      
      输出:
      false
      false
      true
      true
      true
      true
      
      • a == cfalse, a.equals(c)true, 原因是a与c的实际值相等, 但它们并不是引用的同一个对象, c与d的比较也一样
      • a == btrue是因为根据Java虚拟机规范, 字符串类型的常量被作为字面量(string literal)保存在方法区中的运行时常量池中, 且内容相同的字面量必须引用相同的实例
    • 参考文献
      1. https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.1
      2. https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java

    相关文章

      网友评论

          本文标题:Java-Note-String中的"=="与"equals()

          本文链接:https://www.haomeiwen.com/subject/pjhafqtx.html