zoukankan      html  css  js  c++  java
  • Java中==和equals的区别

    "=="可以比较基本数据类型,也可以比较引用数据类型。如果比较基本数据类型比较的是变量中存储的值;如果比较引用类型比较的是变量中存储的地址引用。

    equals()是Object类中继承过来的方法,每个引用类型都可以调用,默认继承的equals()方法的比较与"=="一致。如下代码所示:

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

    如果想要改变比较规则,可以重写equals()方法,如Integer类、String类就是重写了equals()方法.....

    以下就是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;
        }

    补充:考察Integer类加载的时候,自己有一个静态的空间,空间内立即加载Integer类型的数组,内存储256个Integer对象(-128~127)。如果我们用的对象在这个之内(如Integer a = 10),直接取静态区中找对应的对象;如果我们用的对象超出了这个范围(如Integer b = 1000),就会帮我们创建一个新的Integer。

    例如: a = 10;   b = 10;   a == b为true

               a = 1000;  b = 1000;   a == b为false

  • 相关阅读:
    OneNote2007产品密钥及激活方法
    穿着马甲的编码方式链式
    String 转换NameValueCollection 的方法 , 这是原创 嘎嘎
    TransactionScope分布式事务无法使用时, 配置并启动 MSDTC 的解决方案
    Spirit越狱3.1.3/3.2固件(Windows)
    智能感知 不正常的解决方法
    HttpHandler HttpModule入门篇
    Microsoft.Practices.Unity依赖注入使用实例
    ViewEngine 深入解析与应用实例
    打开chm文件提示“已取消到该网页的导航”的解决方案
  • 原文地址:https://www.cnblogs.com/huangcc/p/11380327.html
Copyright © 2011-2022 走看看