zoukankan      html  css  js  c++  java
  • java 中的equal和"=="

    先看一段代码

    String str1 = new String("str");
    String str2 = new String("str");
    System.out.println("==比较 :"+ (str1 == str2));
    System.out.println("equal比较:"+ str1.equals(str2));
    String str3 = "str1";
    String str4 = "str1";
    System.out.println("==比较 :"+ (str3 == str4));
    System.out.println("equal比较:"+ str3.equals(str4));
    以上的输出结果有误,应该是
    false
    equal比较:true
    true
    equal比较:true
    

    根据打印的可以发现使用equal比较时无论是使用自动装箱来实例化还是用new来实例化,返回的都true,而用==则不一样了,自动装箱来实例化的返回的是true,而用new来

    实例化的返回的确实false;先不急着解决为什么,先来了解下equals和==的区别,到时候就可以知道答案了

    equals方法最初是在所有类的基类Object中进行定义的,源码是

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

    可以看出这里定义的equals与==是等效的,但上面的怎么还会不一样呢?
    原因就是String类对equals进行了重写:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                return false;
            }
            return true;
            }
        }
        return false;
        }

    可以看出,重写后的equal和之前发生了本质的区别,重写之前判断的是两个对象相等,重写之后是判断两个对象的值相等。

     

    equals() 比较的是两个对象的值(内容)是否相同。

    "==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

      

  • 相关阅读:
    JavaScript基础概念之----作用域
    Vue-Router基础知识点总结【vue系列】
    前端如何进行seo优化
    常见算法
    ES6新特性
    VUE内使用AES(BCB)加解密
    VUE内使用RSA加解密
    vue 使用v-html指令渲染的富文本无法修改样式的解决方法
    js中字符串可以调用的方法
    基于H5的混合开发介绍(一)WebView
  • 原文地址:https://www.cnblogs.com/nolonely/p/5916800.html
Copyright © 2011-2022 走看看