偷偷理解Java和Scala中==和equals()的区别

news/2024/11/29 2:50:14/

君霸王,社稷定,君不霸王,社稷不定🥽

目录

Java总结
Scala总结

Java中==equals()

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
public class Test {public static void main(String[] args) {String s1 = new String("abc");String s2 = "abc";System.out.println(s1 == s2);       // false   System.out.println(s1.equals(s2));  // true}
} 

总结:

==比较的是对象的内存地址

equals()默认和==一样,也比较的是对象的内存地址,只不过是String对equals()方法进行了重写,字符串的equals()方法比较的是内容。

在这里插入图片描述

Scala中==equals()eq()

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
object Test {def main(args:Array[String]): Unit={var s1:String = new String("abc")var s2:String = "abc"println(s1 == s2)		//trueprintln(s1.equals(s2))	//trueprintln(s1.eq(s2))	//false}
}

scala中,==和equals()功能相同,都比较的是内容是否相同

object Test {def main(args:Array[String]): Unit={var s1:String = new String("abc")var s2:String = "abc"println(s1 == s2)		//true//println(s1.equals(s2))	//true//println(s1.eq(s2))	//false}
}

我们单独编译这一条,然后用反编译工具查看字节码文件。
1.从伴生类作为入口开始执行,然后调用伴生对象所属类中的main方法
在这里插入图片描述
2.查看伴生对象所属类中的main方法在这里插入图片描述发现它底层调用的是equals()方法,因此在Scala中,==和equals()功能相同,都比较的是内容是否相同

3.在Scala 中要想比较地址是否相同,就用第三种方法,eq()方法

eq()编译查看字节码文件
在这里插入图片描述
在这里插入图片描述

对于==和equals()是否多余?各有各的应用场景。
对于引用类型:1. eq()比较地址是否相同2. equals()比较内容是否相同  --->  前提是要重写equals()方法
对于值类型:==比较是否相等  --->  a == 100例如想要判断a是否等于100 这个时候用equals()就不太合适了,直接用a == 100就行了。

总结:

在这里插入图片描述


http://www.ppmy.cn/news/18989.html

相关文章

Redis内部的阻塞式操作以及应对方法

Redis之所以被广泛应用,很重要的一个原因就是它支持高性能访问,也正因为这样,我们必须要重视所有可能影响Redis性能的因素,不仅要知道具体的机制,尽可能避免异常的情况出现,还要提前准备好应对异常的方案。…

eBPF 入门开发实践指南一:介绍 eBPF 的基本概念、常见的开发工具

eBPF 入门开发实践指南一:介绍 eBPF 的基本概念、常见的开发工具 1. 为什么会有 eBPF 技术? 1.1. 起源1.2. 执行逻辑1.3. 架构 1.3.1. 寄存器设计1.3.2. 指令编码格式 1.4. 本节参考文章 2. 如何使用eBPF编程编写 eBPF 程序 2.1. BCC2.2. libbpf-bootstr…

线段树学习

线段树是用来维护区间信息的数据结构 洛谷P3372 区间加区间查询 #include<cstdio>typedef long long LL; const int N 100005; LL tree[N * 4], lazy[N * 4];void push_down(int rt, int l, int r) {if (lazy[rt]) {int mid l ((r - l) >> 1);tree[rt <&l…

计算机视觉OpenCv学习系列:第八部分、图像操作-4

第八部分、图像操作-4第一节、图像卷积操作1.图像卷积定义2.卷积函数3.代码练习与测试第二节、高斯模糊1.高斯模糊2.函数解释3.代码练习与测试第三节、像素重映射1.像素重映射定义2.重映射函数3.代码练习与测试学习参考第一节、图像卷积操作 1.图像卷积定义 卷积的基本原理&am…

cmake 04 使用 python 管理 cmake 工程

本文目标 使用 python 写一个管理 cmake 工程的 cli 程序 参考 Python CLI python Click 官网 Click 中文文档 python多文件打包.exe执行文件 argparse 文档 使用说明 详细说明 思路 使用 click 制作单独的命令, 比如 mcmake_inti,mcmake_built , 每一个命令都打包为…

深入剖析JVM垃圾收集器

文章目录前言1、新生代垃圾收集器1.1、Serial1.2、ParNew1.3、Parallel Scavenge2、老年代垃圾收集器2.1、Serial Old2.2、Parallel Old2.3、CMS&#xff08;Concurrent Mark Sweep&#xff09;3、全堆垃圾收集器3.1、Garbage First&#xff08;G1&#xff09;前言 参考资料&am…

开发人员必备的 15 个备忘单

随着网络编程技术的快速发展&#xff0c;我们必须学习很多新东西。有些语言和框架非常复杂&#xff0c;您可能记不住所有的语法或方法。备忘单是易于访问的笔记。当有人在过去目睹任何有帮助或有价值的事情时&#xff0c;包括我自己&#xff0c;我们都会做笔记。但是&#xff0…

java枚举类2023028

一个类的对象是有限而且固定的&#xff0c;比如季节类&#xff0c; 它只有4个对象&#xff1b;再比如行星类&#xff0c;目前只有8个对象。这种实例有限而且固定的类&#xff0c;在Java里被称为枚举类。在早期代码中&#xff0c;可能会直接使用简单的静态常量来表示枚&#xff…