zoukankan      html  css  js  c++  java
  • 关于 equals

    JDK1.8后字符串常量池被移动到堆(Heap)中,显式的String常量放在堆里的常量池,而String对象放在普通的堆中。

    复习:栈放的是引用,实际的数据都是保存在堆中。

    String a = "abc";
    String b = "abc";
    String c = new String("abc");
    String d = new String("abc");
    System.out.println(a == b);
    System.out.println(a == c);
    System.out.println(c == d);

    从结果“true false false”反推概念,对象a,b使用显示声明,“abc”是在常量池中的同一个内存,而c,d使用new声明,相当于两个不同的普通对象,分别保存在堆中。

    然后“‘==’比较的是地址,‘equals’比较的是值”这句话对String是成立的,但对其他对象并不完全成立。

    equals是超类Object的一个方法,实际上也是间接使用“==”比较:

    public boolean equals(Object obj) {
      return (this == obj);
    }

    其中String重写了equals方法:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
  • 相关阅读:
    JS中原型链的理解
    CSS3的笔记总结
    那些牛掰的 HTML5的API(二)
    初识 HTML5(一)
    jQuery基础知识点(下)
    jQuery基础知识点(DOM操作)
    jQuery基础知识点(上)
    [译]GC专家系列2:Java 垃圾回收的监控
    [译]GC专家系列1: 理解Java垃圾回收
    [译]深入理解JVM
  • 原文地址:https://www.cnblogs.com/LinsenLi/p/12418471.html
Copyright © 2011-2022 走看看