Java中的==、equals及hashCode

简介:

java中的== 和equals连个比较运算符是比较容易混淆的.

我们现在分别来谈谈什么是 == 什么是equals
==
Java中的==可以用于基本类型及引用类型;
当用于基本数据类型的时候,其意义在于""==""脸变得值是否相等.

class Riven{
    public static void main(String[] args) {
        int A = 10;//基本类型
        int B = 10;//基本类型

        int C = 10;//基本类型
        int D = 10;//基本类型

        /**
         * 此时符号==代表的A 的值 和 B 的值是否相等
         */
        boolean flag = (A == B);

        /**
         * 此时符号==代表的C 的值 和 D 的值是否相等
         */
        boolean flag2 = (C == D);
        System.out.println(flag);
        System.out.println("=============我是分隔符=============");
        System.out.println(flag2);
    }
}

输出:
true
=============我是分隔符=============
true

当==符号用于引用类型的时候,其意义在于 比较双方对象是否相同
当然,对于String a = ""啊""和Inreger i = 1对象的创建方式,==比较的方式你也可以姑且看作是值得比较.

本质:
在Java中,""==""比较变量是,比较的就是系统"栈"中的内容,也就是栈中的值
基本数据类型在栈中的值就是其内容,而对象类型在栈中存储的是一个引用地址,这个地址就是对象在堆中的位置.对于"=="需要记住的就是以上内容

equals:
首先你需要名曲的就是基本数据类新没有equals方法,
第二,你需要明白的是,所有的类都有equals方法,因为一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同.
本质:
java.lang包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等
boolean equals(Object o){
return this==o;
}
所以,如果你没有覆盖该方法,那么class A == class B 与 class A.equals(class B)的意义是一样的的;(注意:String和基本包装类型已经覆盖了该方法)
下面是代码的参考:

class Ahir{
    String name;
    public Ahir(String name) {
        System.out.println("实例化一个"+name);
        this.name = name;
    }
}

class Akali{
    String name;

    public Akali(String name) {
        System.out.println("实例化一个"+name);
        this.name = name;
    }
}

class Amumu{
    public static void main(String[] args) {
        /**
         * 虽然实例化对象的时候使用的名字都是一个,但是new 出来的对象都是凡在堆中的,在没有覆盖equals的
         * 情况下 使用的是其超类(Object)的equals方法 其源代码如下:
         *   public boolean equals(Object obj) {
         *        return (this == obj);
         *    }
         *    所以说,在没有覆盖超类equals方法的情况下使用equals方法其本质和"=="没有区别,因为其底层实现还是使用的"=="
         *
         */
        Ahir ahir = new Ahir("阿狸");
        Ahir ahir1 = new Ahir("阿狸");

        Akali akali = new Akali("阿卡丽");
        Akali akali2 = new Akali("阿卡丽");
        boolean equals = ahir.equals(akali);
        System.out.println(equals); //false
        boolean equals1 = ahir.equals(ahir1);
        System.out.println(equals1); //false
    }

}

其详细情况可以参考:

http://blog.csdn.net/u010940300/article/details/44153967

目录
相关文章
|
25天前
|
Java
java equals和==
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法 public boolean equals(0bjectobj):参数可以是任何对象,只有参数是一个字符串并且内 容相同的才会给true;否则返回false 注意事项: 1.任何对象都能用object进行接收。 2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。 3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。 推荐:"abc".equals(str) 不推荐:str.equals("abc") public boolean egualsIgnoreCas
8 1
|
1月前
|
Java
Java中常见需要重写equals方法的类
Java中常见需要重写equals方法的类
|
3月前
|
Java
Java中 ==与equals的区别
Java中 ==与equals的区别
16 1
|
4月前
|
Java
JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?百天百题(3/100)
JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?
|
4月前
|
存储 算法 Java
史上最全的Java容器集合之equals 和 hashCode
史上最全的Java容器集合之equals 和 hashCode
36 0
|
5月前
|
Java
在Java语言中,==、equals 和 equalsIgnoreCase 是用于比较对象或值的三个不同的方法。
在Java语言中,==、equals 和 equalsIgnoreCase 是用于比较对象或值的三个不同的方法。
|
6月前
|
Java
【Java用法】Java 语言规范要求 equals 方法具有的特性
【Java用法】Java 语言规范要求 equals 方法具有的特性
36 0
|
7月前
|
存储 算法 Java
Java 中的 == 运算符、equals 方法和 hashCode 方法
HashMap 中键是不可以重复的,因此它的键就必须是不同的对象,那么这个时候就先用计算速度快的 hashCode 进行比较,若哈希值都不相等,那么这两个对象必然不相等,若是相等的,那么这个就有两种可能出现,一种情况是这两个对象是真的相等,另外一种情况就是出现了罕见的“哈希冲突”现象,那么这个时候就轮到 equals 来进行判断了!在 HashMap 中,键是不可以重复的,也就是说,它们的键都是不相同的,因此就要判断不同对象是否为同一对象。因此,哈希值可以用于判断两个对象是否不等。
70 1
|
存储 Java 程序员
面试点:Java 中 hashCode() 和 equals() 的关系
面试点:Java 中 hashCode() 和 equals() 的关系
159 0