当前位置: 首页 > news >正文

Java与Kotlin中“==“、“====“区别

一、Kotlin 中的区别

  1. ==(双等于) - 结构相等性检查

    • 比较两个对象的内容是否相等(相当于调用 equals() 方法)。

    • 自动处理 null 安全:a == b 等价于 a?.equals(b) ?: (b === null)

    • 示例

      val s1 = "Hello"
      val s2 = String("Hello".toCharArray())println(s1 == s2)  // true(内容相同)
  2. ===(三等于) - 引用相等性检查

    • 比较两个变量是否指向同一个内存地址(同一个对象实例)。

    • 示例

      val s1 = "Hello"
      val s2 = String("Hello".toCharArray())println(s1 === s2)  // false(不同对象实例)

二、Java 中的区别

  1. ==(双等于) - 引用相等性检查

    • 引用类型:比较两个对象的内存地址(是否同一个实例)。

    • 基本类型(如 intchar):比较值是否相等。

    • 示例

      String s1 = "Hello";
      String s2 = new String("Hello");System.out.println(s1 == s2);  // false(不同对象实例)
  2. 没有 === 操作符

    • Java 不支持 ===,内容相等需显式调用 equals() 方法:

      System.out.println(s1.equals(s2));  // true(内容相同)


三、关键区别总结

操作符KotlinJava
==内容相等(自动调用 equals()引用类型:内存地址;基本类型:值
===内存地址相等(引用相同)不存在(用 == 替代)

使用场景

  • Kotlin

    • 需要比较内容时用 ==(如字符串、集合)。

    • 需要检查是否为同一对象时用 ===(如单例、枚举)。

  • Java

    • 比较内容时必须用 equals()

    • 检查内存地址用 ==


四、示例对比

// Kotlin
val a: String? = "Hi"
val b: String? = "Hi"
val c: String? = String("Hi".toCharArray())println(a == b)   // true(内容相同)
println(a === b)  // true(编译器优化,指向同一常量)
println(a === c)  // false(不同对象)
// Java
String a = "Hi";
String b = "Hi";
String c = new String("Hi");System.out.println(a.equals(b)); // true(内容相同)
System.out.println(a == b);      // true(常量池同一对象)
System.out.println(a == c);      // false(不同对象)

http://www.xdnf.cn/news/1224307.html

相关文章:

  • 国内短剧CSP系统开发:技术架构与合规实践全解析
  • 如何在 Mac OS 上安装 Cursor
  • Rockchip RK3568J +FPGA边缘智能系统及储能网关
  • 超聚变:智能体时代,AI原生重构城企数智化基因
  • 软件性能优化:善用80-20法则,精准突破瓶颈
  • 技术信任革命:区块链重构信用机制全解析
  • PyTorch深度学习快速入门学习总结(四)
  • echarts一个图例控制多个图表
  • qt中的手势
  • 流式编程终端操作
  • HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例
  • Linux选择
  • 自建rustdesk服务器过程记录
  • 嵌入式学习笔记-MCU阶段--DAY09
  • Java HTTPS 请求失败排查与证书导入全过程
  • 外卖“0元购”退场后,即时零售大战才刚开始
  • 开源医院信息管理系统:基于若依框架的智慧医疗解决方案
  • Vue项目使用ssh2-sftp-client实现打包自动上传到服务器(完整教程)
  • Meta合成孔径波导全息术新进展,微美全息加速AI+AR全息技术融合稳步前行
  • 常见框架漏洞
  • Node.js的用途和安装方法
  • Windows11 WSL安装Ubntu22.04,交叉编译C语言应用程序
  • UE5 动态扫描波
  • 汽车EDI:Vitesco EDI 项目案例
  • Vue与Ajax快速入门
  • 「一键召唤 007」:开源多智能体 JoyAgent-JDGenie 如何让你的 AI 产品从 Demo 到 真香 只差 Ctrl+C / Ctrl+V?
  • 微波(Microwave)与毫米波(Millimeter wave)简介
  • ansible简单playbook剧本例子2
  • flutter release调试插件
  • 32. flex 的子元素可以浮动吗