==和equals方法的区别和联系

1、==

(1)基本数据类型:比较的是值是否相等

   int a=1;
   int b=1;
   System.out.println(a==b);

返回true。

(2)引用数据类型,比较的是是否为同一对象:

        Student student1=new Student("201911","zhai");
        Student student2=new Student("201912","zhang");
        System.out.println(student1==student2);

返回false。

两个对象的引用分别指向不同的对象。

        Student student1=new Student("201911","zhai");
        Student student2=new Student("201912","zhang");
        System.out.println(student1==student2);

返回true。

对象的引用虽然不同,但是他们指向的是同一个对象。

2、equals()方法

(1)equals()方法不能作用于基本数据类型的变量

(2)equals()方法作用于引用数据类型,比较的是是否为同一对象:

equals继承自Object类,查看源码:

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

可以看出,其实质是用==比较引用数据类型是否为同一对象。

(3)有些类对equals方法进行了重写(例如:String类):

查看String类的源码:

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;
    }

比较的是对象的值,而不是对象是否为同一对象。

        String string1=new String("jiayou");
        String string2=new String("jiayou");
        System.out.println(string1.equals(string2));//true
        System.out.println(string1==string2);//false

因为分别创建了两个对象,对象的引用分别指向自己的对象,虽然两个对象的值相等,但是两个对象不是同一个对象(对象的地址不同)。

(4)自定义equals方法,比较对象的值是否相等:

public boolean equals(Object obj) {
        // 判断当前对象和传递的对象,如果是同一个对象直接通过
        if (this == obj) {//引用数据类型,比较的是是否为同一对象
            return true;
        }
        // 判断传递进来的对象是否是Vehicle类型,不是的话直接pass
        if (!(obj instanceof Vehicle)) {
            return false;
        }
        // 将obj向下转型为Vehicle引用,可以访问Vehicle特有内容,否则只能访问共有内容
        Vehicle v = (Vehicle) obj;
        return this.vType == v.vType && this.vNum == v.vNum;//基本数据类型,比较的是基本数据类型的值
    }

对equals方法进行重写后,equals方法的功能由比较两个对象是否为同一对象变为对象的值是否相等。

原文地址:https://www.cnblogs.com/zhai1997/p/12398258.html

时间: 2024-11-10 13:54:12

==和equals方法的区别和联系的相关文章

Java中“==”与equals方法的区别

1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:String类对equals进行了重写:1)若是同一个对象,返回true: 2)若不是,则比较它们的值,值相同,返回true 重写代码: public boolean equals(Object anObject) { if (this == anObject) { return true; } if

C#中==与Equals方法的区别

usingSystem;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{    class Person    {        private string name;        public string Name        {            get { return name; }            set { name

"=="和equals方法的区别

.==和equal .栈内存和对内存 单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,ne

==运算符和equals()方法的区别

Java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用equals方法. 1. ==运算符 对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就会返回true:然而如果是两个引用类型的变量,则分为两种情况:1)它们指向同一个对象,结果返回true:2)它们指向不同的对象,即使对象内容相同,结果还是返回false:下面程序示范了使用==运算符比较两个变量是否相等的结果: public class Test { public static vo

java中 == 和 equals()方法的区别

参考博客: 1.当要判断两个对象是否是相同时,可以重写equals()方法.....参考:   http://www.2cto.com/kf/201408/327873.html 2.具体 : http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html 3.http://blog.csdn.net/xcysuccess3/article/details/6557771 主要注意的地方:String Integer等类的equal

JAVA面试题:equals()方法和== 区别

http://bbs.csdn.net/topics/390000725 总结: equals在没重写之前和==一样,重写之后,equals只要内容一样即为true equals跟==一般情况下是等价的,但是对于String类型,它重写了equals方法,比较的是内容.默认情况下两个都是比较的引用地址,除非你重写equals方法. equals源码: public boolean equals(Object anObject) { if (this == anObject) { return t

Java基础之"=="和 和 equals 方法的区别

一."=="操作符 ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存) ,变量也占用一块内存,例如 Objet obj = new Object();变量 obj 是一个内存,new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存

hashcode和equals方法的区别与联系

equals:比较的是两个对象的内存地址值 hashCode:比较的是两个对象在hash表中的位置 hashCode的由来:对象的内存地址通过hash函数算法得到hashcode          1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的.          2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的. HashCode的存在主要是为了查找的快捷性 每当需要对比两

java中‘==’和‘equals()’方法的有趣探索

这两天在看周志明的<深入理解java虚拟机>,受益颇多,根据书中的启示,对java中'=='和'equals()'方法的区别做了一些探索. 首先,为了更快地让进入状态,我们先来所几个判断题,例程如下,请判断各个System.out.println()输出的结果. <pre name="code" class="java"> public static void main(String[] args) { Integer a =1; Integ