首页 > 其他分享 >==和equals的区别

==和equals的区别

时间:2023-09-13 18:05:12浏览次数:30  
标签:判断 String 区别 System equals println out


 

  1. ==:既可以判断基本类型,又可以判断引用类型。
  2. ==:如果判断基本类型,判断的是值是否相等。
  3. ==:如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一对象。
  4. equals:是object类中的方法,只能判断引用类型。
  5. 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。(具体可查看jdk源码)。

名称

概念

基本类型

引用类型

==

比较运算符

可以,判断的是值是否相等

可以,判断是不是同一对象

equals

是object类中的方法

java类都可以使用

不可以

可以,默认判断的是地址是否

相等,子类中往往重写该方法,

用于判断内容是否相等。

//JDK源码Object类中的equals方法
//Object类中的equals方法默认就是比较对象地址是否相同,也就是判断两个对象是否是同一对象。
public boolean equals(Object obj) {
        return (this == obj);//此时的==就是在判断引用类型,判断地址是否相等。
    }


//JDK源码String类的equals方法
//String是object的子类,将equals方法重写,变成了比较两个字符串是否相同
public boolean equals(Object anObject) {
        if (this == anObject) {//如果是同一个对象
            return true;//返回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;//如果两个字符串的所有字符都相等,返回true
            }
        }
        return false;//如果比较的不是字符串,直接返回false;
    }


//JDK源码Integer类也重写了Object的equals方法
public boolean equals(Object obj) {
        if (obj instanceof Integer) {//判断类型
            return value == ((Integer)obj).intValue();//判断两个值是否相等。
        }
        return false;
    }

==和equals的区别_字符串

package com.study.srv.demo4;


public class Demo01 {
    public static void main(String[] args) {
        N a = new N();
        N b=a;
        N c=b;
        System.out.println(a==c);//true,比较引用类型,同对象
        System.out.println(b==c);//true,比较引用类型,同对象
        M d=a;
        System.out.println(d==c);//true,比较引用类型,同对象
        int num1=10;
        double num2=10.0;
        System.out.println(num1==num2);//true,基本数据类型,判断值是否相等
        //
        String str1 = new String("jack");//String类
        String str2 = new String("jack");
        System.out.println(str1==str2);//此时是判断是否是同一对象,false。
        System.out.println(str1.equals(str2));//判断比较字符串是否相等,true。
        Integer int1 = new Integer(100);//Integer类
        Integer int2 = new Integer(100);
        System.out.println(int1==int2);//此时是判断是否是同一对象,false。
        System.out.println(int1.equals(int2));//判断两值是否相等,true。
    }
}
class M{}
class N extends M{}

==和equals的区别_引用类型_02

==和equals的区别_System_03

==和equals的区别_System_04编辑

package com.study.srv.demo4;


public class Demo01 {
    public static void main(String[] args) {
        M m1 = new M();
        m1.name="jack";
        M m2 = new M();
        m2.name="jack";
        System.out.println(m1==m2);//此时的==是判断的是引用类型,判断的是地址是否相等。所以false
        System.out.println(m1.equals(m2));//此时的equals调的是Object类的equals方法,值判断是否是同一对象,所以false
        System.out.println(m1.name.equals(m2.name));
        //此时的equals因为name属性是String类型,所以调的是String类中的equals方法,
        // 先判断是否是同一对象,如不是在判断字符串的值是否相等,所以true。
    }
}
class M{
    public String name;
}

==和equals的区别_System_05

==和equals的区别_引用类型_06

==和equals的区别_System_07编辑

标签:判断,String,区别,System,equals,println,out
From: https://blog.51cto.com/u_16261274/7462828

相关文章

  • Java基础——==和equals的区别
     ==:既可以判断基本类型,又可以判断引用类型。==:如果判断基本类型,判断的是值是否相等。==:如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一对象。equals:是object类中的方法,只能判断引用类型。默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。(具体可查......
  • 阿里云轻量应用服务器和ECS有什么区别?
    阿里云服务器ECS和轻量应用服务器有什么区别?云服务器ECS是明星级云服务器,轻量应用服务器可以理解为简化版的云服务器ECS,轻量适用于单机应用,云服务器ECS适用于集群类高可用高容灾应用,阿里云百科来详细说下阿里云轻量应用服务器和云服务器的区别,包括运维区别、镜像系统、使用场景、网......
  • java安全架构____对称加密和非对称加密区别(对称秘钥,非对称秘钥)
    (一)对称加密(SymmetricCryptography)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secretkey),这种方法在密码学中叫做对称加密算法。对称加密通常使用的是相对较小的密钥,一般小于256bit。因为密钥越大,加密越强.例如AES,DES(二)......
  • 正向代理和反向代理的区别
    一.正向代理帮助内网访问外网用的#从内到外.客户端A访问不到服务端F需要做一个代理服务器D来访问F应用场景 1.一个公司局域网的人都有公司内网192.178.xx.xx和192.188.xxx.xxx不同部门或不同ip段想要访问外网如百度就需链接一个可以访问外网的机器做代理去访问百度获取数......
  • String、StringBuffer和StringBuilder的区别,ArrayList和linkedList的区别,HashMap和Has
    一、String、StringBuffer和StringBuilder的区别1.1相关介绍String是只读字符串,并不是基本数据类型,而是一个对象。从底层源码来看是一个final修饰的字符数组,所引用的字符串不能改变,一经定义无法再增删改。每次对String操作都会生成新的String对象。所以对于经常改变内容的字符串最......
  • Vue.set和splice方法有什么区别?
    Vue.set方法和splice方法在Vue中用于修改数组的行为有一些区别。一:Vue.set(obj,key,value):用途:Vue.set是Vue提供的全局方法,用于向响应式对象中添加新的响应式属性,并确保这个新属性是响应式的。参数:obj:要修改的目标对象。key:要添加的属性键名。value:要添加的属性值。示......
  • git fetch、git pull区别
    参考:https://blog.csdn.net/weixin_42343307/article/details/121239170gitfetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。gitpull是将远程主机的最新内容拉下来后直接合并,即:gitpull=gitfetch+gitmerge,这样可能会产生冲突,需要......
  • linux shell 字符串变量 有双引号和无双引号的区别
     001、[root@pc1test02]#lsa.shb.sh[root@pc1test02]#cata.sh##测试程序1#!/bin/bashstr1="ab_cd_ef"tmp1=$(echo$str1|sed's/_/\n/g')echo$tmp1[root@pc1test02]#catb.sh##测试程序2#!/bin/bashstr1="ab_......
  • Fetch和ajax之间的区别
    Fetch和ajax之间的区别fetchFetchAPI是基于Promise设计的Fetch内置了对JSON数据的解析支持,我们只需要调用response.json()方法,可以直接获得返回的JSON数据。语法简洁,更加语义化原生支持率不高,可以用polyfill兼容IE8+浏览器ajax是理用XMLHttpRequest对象来请求数据的,而fetc......
  • Java中Comparable与Comparator的区别
    Java中的Comparable和Comparator都是比较有用的集合排序接口,但是这俩接口使用却有着明显区别,具体使用哪一个接口,今天我们来一起了解下。Comparable接口Comparable是一个排序接口,位于java.lang包下面,实现该接口的类就可以进行自然排序。先看下Comparable接口的定义:pa......