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() 比较的是两个对象的值(内容)是否相同。

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

      

  • 相关阅读:
    listview删除item
    标准listview加图标布局
    android事件消费机制,从外传到里面,里面具有优先选择权,如果里面的不需要,则传递给外面一层消费
    listview 按最新数据展示
    给listview添加数据,添加数据之后即刻显示出来,并把数据放在listview列表的最前面
    EditText限制输入长度和限定输入数字
    josn解析常见的几种方法
    bnu Robots on a grid
    hdu 1348 Wall
    hdu poj Oulipo
  • 原文地址:https://www.cnblogs.com/nolonely/p/5916800.html
Copyright © 2011-2022 走看看