zoukankan      html  css  js  c++  java
  • java .equals()和==的区别

    (1)比较基本数据类型

    对于8种基本数据类型的变量,变量直接存储的是“值”,因此在用关系操作符==来进行比较时,比较的就是 “值” 本身。

    (2)比较包装类

    public class Main {
        public static void main(String[] args) {
            Integer i1 = new Integer(1);
            Integer i2 = new Integer(1);
            System.out.println(i1 == i2);//false
            System.out.println(i1.equals(i2));//true
        }
    }

    这里"=="比较的是变量指向的内存地址,new产生的两个不同的对象所存放的地址是不一样的,这边的"equals"比较的就是内容,这里为什么比较的是内容,因为Integer重写了equals的方法。附上源码:

        public boolean equals(Object obj) {
            if (obj instanceof Integer) {
                return value == ((Integer) obj).intValue();
            }
            return false;
        }

    (3)比较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;
        }

    (4)比较对象

    public class Main {
        public static void main(String[] args) {
            Test t1 = new Test();
            Test t2 = new Test();
            System.out.println(t1 == t2);//false
            System.out.println(t1.equals(t2));//false
        }
    }

    没有重写equals方法的类都是调用Object的equals方法:

        public boolean equals(Object obj) {
            return (this == obj);
        }
  • 相关阅读:
    今天的温度还是有点高.....
    [React] 点击---图片90°旋转
    javascript onclick事件可以调用两个方法吗?
    vue 页面回退mounted函数不执行的问题及解决方法
    vue static和assets的区别
    js实现复制|剪切指定内容到粘贴板--clipboard
    纯前端html导出pdf--分页+不分页--html2canvas+jsPDF
    git常用命令行
    浅谈“观察者模式”那点小事儿
    [Linq] ORM
  • 原文地址:https://www.cnblogs.com/Alpharun/p/8974341.html
Copyright © 2011-2022 走看看