Java中==和equals的区别

Wesley13
• 阅读 694

"=="可以比较基本数据类型,也可以比较引用数据类型。如果比较基本数据类型比较的是变量中存储的值;如果比较引用类型比较的是变量中存储的地址引用。

equals()是Object类中继承过来的方法,每个引用类型都可以调用,默认继承的equals()方法的比较与"=="一致。如下代码所示:

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

如果想要改变比较规则,可以重写equals()方法,如Integer类、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;
    }

补充:考察Integer类加载的时候,自己有一个静态的空间,空间内立即加载Integer类型的数组,内存储256个Integer对象(-128~127)。如果我们用的对象在这个之内(如Integer a = 10),直接取静态区中找对应的对象;如果我们用的对象超出了这个范围(如Integer b = 1000),就会帮我们创建一个新的Integer。

例如: a = 10;   b = 10;   a == b为true

           a = 1000;  b = 1000;   a == b为false

点赞
收藏
评论区
推荐文章
待兔 待兔
4天前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
LinMeng LinMeng
3年前
js之传值与传址/undefined和null/严格模式
传值与传址基本数据类型有五种Undefined、Null、Boolean、Number和String引用数据类型有两种object,array,fn两种数据类型的区别:1.存储位置不同原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中;引用数据类型直接存
Wesley13 Wesley13
2年前
java中字符串相等判断
字符串的判断有2种:        1、判断地址是否相等 用:        2、判断值是否相等 用:equals方法Object类作为所有类的超类,而Object类的equals方法是直接比较地址的,源码如下:publicbooleanequals(Objectobj){
红烧土豆泥 红烧土豆泥
2年前
补充关于equals的比较方式
补充(equals比较)Object中的equals比较的是地址languagepublicbooleanequals(Objectobj)return(thisobj);java.lang.String类中equals的方法equals判断相等依据策略:如果与目标相等返回0,小于目标返回值小于0,大于目标返回值大于0lan
Wesley13 Wesley13
2年前
Java中只存在值传递
在Java中并不存在引用传递(即地址传递),对于变量(可以是基本数据类型,也可以是引用数据类型)而言,可以理解为就是一个地址。传递,存在着拷贝操作。举个列子:1、在方法参数上,传递的是基本数据类型。定义了一个用于交换两个整型数的方法:publicstaticvoidswap(inta,intb){in
Stella981 Stella981
2年前
JavaScript的深拷贝和浅拷贝
一、数据类型数据分为基本数据类型(String,Number,Boolean,Null,Undefined,Symbol)和对象数据类型。、1.基本数据类型的特点:直接存储在栈(stack)中的数据2.引用数据类型的特点:存储的是该对象在栈中引用,真实的数据放在堆内存里。引用数据类型在栈中存储了指针,该指针指向堆中该实
可莉 可莉
2年前
06_java之类概述
01引用数据类型\_类A:数据类型a:java中的数据类型分为:基本类型和引用类型B:引用类型的分类a:Java为我们提供好的类,比如说:Scanner,Random等。b:我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我
Easter79 Easter79
2年前
String字符串相等判断
\:比较的是内存地址值equals:比较的是值,对象的equals()可以被重写java中字符串的比较:Stringa"abc";Stringb"abc"那么ab将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和
Stella981 Stella981
2年前
JVM调优总结一
数据类型   Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,cha
Wesley13 Wesley13
2年前
Java增强的包装类
java语言是面向对对象的编程语言,但这八种基本数据类型不支持面向对对象的编程的机制,基本数据类型的数据不具备“对象”的特征:没有成员变量、方法可以调用。java提供这8中基本数据类型,主要是为了照顾程序员的传统的习惯。但这也带来了麻烦,因为所有的引用类型都继承来自Object的类,可当成object的类型使用,所以当一个方法的参数是object类型参数时候