zoukankan      html  css  js  c++  java
  • 【 Java 笔记 】== 和 equals

    首先先说一下==

    ==操作符用来比较两个变量或常量的值是否相等,也就是比较变量或常量在内存中储存的数值是否相等(这句话来自https://www.cnblogs.com/findumars/p/3746878.html 但我稍微改了一下)

    然后,在最底层代码,(注意,我说的是最底层)==操作符和Object.equals(Object obj)都是值的比较,甚至Object.equals(Object obj)方法调用的就是 == 

    源码如下:

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

    但是,由于Java所有的类(除Object)都是Object类的子类,所以他们都可以覆盖Object类中的方法,如equals(...),所以,为了体现多态思想,为了方便,很多类都覆盖了equals()方法。而这些重新实现的equals方法就不尽相同了。下面是String类中的equals()实现

     1 public boolean equals(Object anObject) {
     2     if (this == anObject) {                // 是否和本身比较 用的还是==,比较两个对象的地址是否相同
     3         return true;
     4     }
     5     if (anObject instanceof String) {          // 如果目标为字符串类型或他的子类
     6         String anotherString = (String) anObject;
     7         int n = value.length;       
     8         if (n == anotherString.value.length) {    // 先比较长度
     9             char v1[] = value;              // String类中 value是个私有的char数组
    10             char v2[] = anotherString.value;
    11             int i = 0;
    12             while (n-- != 0) {
    13                 if (v1[i] != v2[i])           // 比较每一个字符是否相同
    14                        return false;
    15                 i++;
    16             }
    17             return true;
    18         }
    19     }
    20     return false;
    21 }

    其他的equals()实现方式各异,但基本都是比较内容是否相同。所以,equals()比较的到底是什么还真得看情况,没覆盖Object.equals的就和==一样,覆盖了,那就去看看他的源代码吧~

    与之类似的还有toString()等等。

    道阻且长,行则将至。
  • 相关阅读:
    那些花儿
    RIATest 安装与破解
    是什么让你的ExtJS应用程序运行缓慢?
    企业级系统架构的理解
    ExtJS 4.0.1发布:提高性能和错误修复
    ExtJS 4动态加载组件
    Step by Step WebMatrix网站开发之二:使用WebMatrix(3)
    四大类NoSQL数据库
    ExtJS 4中动态加载的路径设置
    性能提高和支持IE 9的新的ExtJS发布版:4.02和3.4
  • 原文地址:https://www.cnblogs.com/forfriendforfun/p/7820383.html
Copyright © 2011-2022 走看看