首页 > 编程语言 >Java基础——==和equals的区别

Java基础——==和equals的区别

时间:2023-09-13 17:31:34浏览次数:37  
标签:判断 Java String 区别 equals System 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;
    }

Java基础——==和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{}

Java基础——==和equals的区别_System_02

Java基础——==和equals的区别_字符串_03

Java基础——==和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;
}

Java基础——==和equals的区别_引用类型_05

Java基础——==和equals的区别_System_06

Java基础——==和equals的区别_System_07编辑

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

相关文章

  • Java实现常见查找算法
    Java实现常见查找算法查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。线性查找线性查找(LinearSearch)是一种简单的查找算法,用于在数据集中逐一比较每个元素,直到找到目标元素或搜索完整个数据集。它适用于任何类型......
  • 为什么要学习 JavaScript?
    出于多种原因,学习JavaScript非常有帮助,特别是如果您对Web开发或一般编程感兴趣的话。以下是学习JavaScript的一些有力论据:灵活性:JavaScript编程语言非常灵活,可用于前端和后端Web开发。它经常用于创建桌面应用程序(使用Electron等框架)以及移动应用程序(使用ReactNative)。W......
  • Java开发常用工具类
    目录一.org.apache.commons.io.IOUtils二.org.apache.commons.io.FileUtils三.org.apache.commons.lang.StringUtils四.org.apache.http.util.EntityUtils五.org.apache.commons.lang3.StringUtils六.org.apache.commons.io.FilenameUtils七.org.springframework.ut......
  • 无涯教程-JavaScript - ISERR函数
    描述如果ISERR函数引用的是Excel错误(#N/A错误除外),则ISERR函数返回逻辑值TRUE。否则返回FALSE。语法ISERR(value)争论Argument描述Required/OptionalvalueAnerrorRequiredNotes此函数在公式中用于测试计算输出很有用。与IF函数结合使用时,此函数提供了一种用于......
  • 阿里云轻量应用服务器和ECS有什么区别?
    阿里云服务器ECS和轻量应用服务器有什么区别?云服务器ECS是明星级云服务器,轻量应用服务器可以理解为简化版的云服务器ECS,轻量适用于单机应用,云服务器ECS适用于集群类高可用高容灾应用,阿里云百科来详细说下阿里云轻量应用服务器和云服务器的区别,包括运维区别、镜像系统、使用场景、网......
  • java安全架构____DES加密解密
    //READMEDES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步:1)初始置换其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位…依此类推,最后一位是......
  • 无涯教程-JavaScript - INFO函数
    描述INFO函数返回有关当前操作环境的信息。语法INFO(type_text)争论Argument描述Required/OptionalType_text指定要返回的信息类型的文本。下表给出了Type_text的值和相应的返回信息。RequiredType_text返回的信息"目录"当前目录或文件夹的路径。"num......
  • java安全架构____java DSA签名原理
    甲方_________________________________________公钥:U3VuIERTQSBQdWJsaWMgS2V5CiAgICBQYXJhbWV0ZXJzOgogICAgcDoKICAgIGZjYTY4MmNlIDhlMTJjYWJhIDI2ZWZjY2Y3IDExMGU1MjZkIGIwNzhiMDVlIGRlY2JjZDFlIGI0YTIwOGYzIGFlMTYxN2FlCiAgICAwMWYzNWI5MSBhNDdlNmRmNiAzNDEzYzVlMSAyZWQw......
  • java安全架构____java DSA加密解密
    importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.PrivateKey;importjava.securit......
  • java安全架构____java 秘钥对生成
    importjava.io.FileOutputStream;importjava.io.OutputStreamWriter;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.PrivateKey;importjava.security.PublicKey;importjava.security.SecureRandom;importjava.util.U......