Kotlin-17-等号比较(== 、===)

2023-05-16

目录

1、Java中的 ==

2、Java中的 equals()

3、两者的区别

3、对于基本数据类型的==比较

4、Kotlin中的== 与 ===


1、Java中的 ==

Java中的== 直接比较的是两个对象的堆内存地址,如果相等,则说明这两个引用实际上指向的是同一个对象地址的。

2、Java中的 equals()

Java中的equals() 比较会先看两个对象是否指向于同一个对象地址,如果不是,则比较两个对象的属性值是否相等。

下面Dog实体类中的equals()方法是Java中对实体类的通用重写。从下面可以看出,当我们调用equals()比较的时候,会先比较两个对象是否==,然后会比较两个对象的属性值是否相等,如果相等,就会返回true。

public class Dog {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Dog)) return false;

        Dog dog = (Dog) o;

        if (age != dog.age) return false;
        return name != null ? name.equals(dog.name) : dog.name == null;
    }
}

3、两者的区别

  •    == 就只比较两个对象指向的内存地址是否一样
  •   equals()比较的是两个对象的属性值是否一样
  Dog dog1=new Dog("小黑",3);
  Dog dog2=new Dog("小黑",3);

  System.out.println("dog1==dog2        : "+(dog1==dog2));
  System.out.println("dog1.equals(dog2) : "+dog1.equals(dog2));

  //输出结果
   dog1==dog2        : false
   dog1.equals(dog2) : true

3、对于基本数据类型的==比较

对于基本的数据类型(byte,int ,short,char ,float ,double,long,boolean )来说 ,它们是作为常量在方法区的常量池里面以HashSet策略存储起来的,对于字符串"abc" 来说,一个常量只会对应一个地址,无论有多少个"abc",都只会存储在一个地址,因此它们的引用都只会指向同一个地址, 基本的数据类型和String常量是可以用 == 直接比较的

从下面可以看出name1和name2 看似是创建了两个对象,但是其实他们的值 “ZhangSan” 所在常量池中的内存地址是一样的,所以他们的结果一样。

注意:new String() 会将 name3对象存放在堆内存中,而不是常量池中,所以他们的内存地址是不一样的。只要是通过new出来的对象都会存放在堆内存中。如果不是很理解,可以看一些内存的文章。

 String name1 = "ZhangSan";
 String name2 = "ZhangSan";
 String name3 = new String("ZhangSan");

 System.out.println("name1==name2         :  "+(name1==name2));
 System.out.println("name2==name3         :  "+(name3==name2));
 System.out.println("name1==name3         :  "+(name1==name3));
 System.out.println("name1.equals(name3)  :  "+name1.equals(name3));

  //输出结果
  name1==name2         :  true
  name2==name3         :  false
  name1==name3         :  false
  name1.equals(name3)  :  true

对于基本数据的包装类型(Byte,Short,Character,Integer,Float,Double,Long,Boolean)除了Float和Double之外,其他六种都是实现了常量池的,因此对于这些类型,也可以通过 == 来判断是否相等.

  Integer age1=127;
  Integer age2=127;
  Integer age3=128;
  Integer age4=128;

  System.out.println("age1==age2         :  "+(age1==age2));
  System.out.println("age3==age4         :  "+(age3==age4));

  //输出结果
  age1==age2         :  true
  age3==age4         :  false

因为Integer在常量池的存储范围是[-128,127],在这个范围内是直接存储到常量区的,超出这个范围则会在堆内存中创建一个新的对象的来保存这个值,因而m,n指向了两个不同的对象地址,因而不相等.

4、Kotlin中的== 与 ===

== 对应于Java中的 equals() 

===对应于 Java中的 ==

 val person1 = Person("ZhangSan", 18)
 val person2 = Person("ZhangSan", 18)

 println("person1 === person2 : ${person1 === person2}")
 println("person1 == person2  : ${person1 == person2}")

 val dog1 = Dog("小黑", 3)
 val dog2 = Dog("小黑", 3)

 println("dog1==dog2          : " + (dog1 === dog2))
 println("dog1.equals(dog2)   : " + (dog1 == dog2))

//输出结果
 person1 === person2 : false
 person1 == person2  : true
 dog1==dog2          : false
 dog1.equals(dog2)   : true

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin-17-等号比较(== 、===) 的相关文章

随机推荐

  • C++ winpcap网络抓包代码实现,以及抓包内容解析。

    c 43 43 实现抓包代码 1 安装winpcap windows packet capture 是windows平台下一个免费 xff0c 公共的网络访问系统 开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能
  • Python dataframe更换列名称

    方法1 使用pd rename函数 span class hljs operator a span span class hljs built in rename span columns 61 span class hljs string
  • 知识点2:Swift REPL

    关于REPL简介 REPL xff1a 英文缩写 xff08 Read Eval Print Loop xff09 即读取 执行 输出 循环的意思 Xcode 6 1 引入了另一种以交互式的方式体验Sw ift的方法 主要特点 xff1a
  • iOS 关于UIAlertController常见使用方法

    Step 1 警告框 1 代码 1 创建提示窗口 参数1 xff1b Title xff1a 标题 参数1 xff1b message xff1a 提示内容 参数1 xff1b Style 风格 UIAlertControllerStyle
  • 2023年最新版kali linux安装教程

    一 前期准备 前排提醒 xff0c 文末有绿色版安装包免费领取 xff01 二 VMware虚拟机配置 1 打开vmware xff0c 点击创建新的虚拟机 2 选择自定义 高级 选项 xff0c 点击下一步 3 继续下一步 4 选择 稍后
  • CentOS7.1下 安装vncserver和删除vnc占有的端口

    今天给两台新服务器装CentOs7 1系统 xff0c 然后装VNCServer的时候感觉网上的教程要么复杂多此一举 xff0c 要么不清楚 xff0c 关于 list端口的部分都没讲 所以这里整理一下 xff0c 按着下面的顺序来就可以了
  • mac使用虚拟机(VirtualBox+centos7)搭建kubernetes(K8S)集群

    文章目录 说明一 环境准备1 配置主机网络2 配置磁盘空间3 安装虚拟机配置网络4 设置Linux环境 三台均需要设置 二 安装docker kubeadm kubelet kubectl 三台均需要设置 1 安装docker环境2 kub
  • .NET6入门:1.Windows开发环境搭建

    作为 NET的最新版本 NET6长期支持版已经发布 xff0c NET6宣称是迄今为止最快的 NET 那当然不能落下时代的潮流 xff0c 就让我们跟着文章进入 NET6的世界吧 1 NET6SDK下载 Download NET Linux
  • 音视频编解码原理(一) 封装格式和编码方式简介

    一 封装格式 要了解音视频编解码原理 xff0c 首先需要知道什么是封装格式 xff1f 所谓封装格式 xff0c 就是将已经编码压缩好的视频轨和音频轨按照一定的格式封装到一个文件中 xff0c 一般情况下 xff0c 不同的封装格式对应不
  • VS调试方法总结(二)

    通过结构化异常定位崩溃程序 程序崩溃时 xff0c 生成文本文件 xff0c 记录崩溃得堆栈信息 直接上代码 已经编译通过 xff0c 拷贝直接可用 h include lt Windows h gt include lt stdarg h
  • QT(C++) + OpenCV + Python库打包发布可执行EXE

    QT xff08 C 43 43 xff09 43 OpenCV 43 Python库打包发布可执行EXE 背景 最近写了一个操作界面 xff0c 不仅用到了OpenCV的函数 xff0c 还调用了一个python脚本 xff0c 所以这里
  • Linux 内存管理 页回收和swap机制

    页高速缓存和页写回机制 页是物理内存或虚拟内存中一组连续的线性地址 xff0c Linux内核以页为单位处理内存 xff0c 页的大小通常是4KB 当一个进程请求一定量的页面时 xff0c 如果有可用的页面 xff0c 内核会直接把这些页面
  • docker 创建 network,出现异常问题及解决

    最近在使用 docker 创建 network 时 xff0c 出现错误 xff1a Error response from daemon could not find plugin bridge in v1 plugin registry
  • 工作进度所占总进度的比例

    如果实现的功能模块全部完成为 或者说 工作进度 xff1a 100 那么 xff1a 1 产品原型全部完成 包括文档的整理 xff1a 15 2 UI设计全部完成 xff1a 10 3 后台全部完成 xff1a 25 4 前台全部完成 xf
  • Docx4J替换内容时,内容换行失败问题解决

    WordprocessingMLPackage wordMLPackage 61 WordprocessingMLPackage load new java io File templatePath MainDocumentPart doc
  • C语言经典例题-用4×4矩阵显示从1到16的所有整数,并计算每行、每列和每条对角线上的和

    编写一个程序 xff0c 要求用户 按任意次序 xff09 输入从1到16的所有整数 xff0c 然后用4 4矩阵的形式将它们显示出来 再计算出每行 每列和每条对角线上的和 include lt stdio h gt int main in
  • java中Map.hashCode()函数说明

    在java中 xff0c Map hashCode 函数是在具有一定工作积累后 xff0c 为了更好的成长不可避免需要研究的内容 首先 xff0c 我们先看下原始代码 xff1a static final int hash Object k
  • 不支持的特性: getMetaData,问题解决

    最近使用springboot 43 mybatis 时遇到 xff1a 不支持的特性 getMetaData 的异常 使用 xff1a 64 Options useGeneratedKeys 61 false 解决的该问题 xff1b 官方
  • jsp四种范围

    page代表是与一个页面相关的对象和属性 request代表是与 Web 客户机发出一个请求相关的对象和属性 session代表是与用于某个 Web 客户机的一个用户体验相关的对象和属性 application代表是与整个 Web 应用程序
  • Kotlin-17-等号比较(== 、===)

    目录 1 Java中的 61 61 2 Java中的 equals 3 两者的区别 3 对于基本数据类型的 61 61 比较 4 Kotlin中的 61 61 与 61 61 61 1 Java中的 61 61 Java中的 61 61 直