java面试题之equals和==的区别

server/2025/2/28 4:40:39/

详细的equals和==的区别

这已经是一个老生常谈的话题了,最近有工作了三四年的朋友去面试,面试官还是问到了这个问题,这好像已经成为java基础部分必问的一个问题了,在这里我也结合了网上的一些细节,谈谈自己的看法。

首先来看一下实例
在这里插入图片描述
运行结果如下
在这里插入图片描述
我们再来看看这个
在这里插入图片描述
运行结果如下
在这里插入图片描述
可以看到s1和s2打印出来的值是一样的,但是"=="比较返回的结果却是false,而equals返回的结果却是true,这是因为双等号比较的其实是地址值。

解析

"=="比较的解析
在编译String s1=“song"的时候其实是jvm在常量池中创建了一个内容为"song"的地址值,然后让s1去指向"song”,而不是把"song"直接赋值给s1;
在编译String s2=“song"的时候常量池中已经有了"song"的地址值,所以让s2直接指向常量池中的"song”,这样s1和s2的地址值都是常量池中"song"的地址值,所以通过双等号的运算结果是true。

在这里插入图片描述
然而在第二种情况下执行String s2=new String(“song”)的时候,要记住每new一次就会出现一个新的对象,所以这种情况是直接在堆内存中开辟了一块新的空间去储存"song",所以此时s1和s2的地址值是不一样的,自然==的结果就为false。
在这里插入图片描述
那为什么equals会返回true呢,来看看equals的源码就知道了
在这里插入图片描述
这下就能很清楚的知道为什么equals返回的结果是true了

如果有什么遗漏或者出错的地方欢迎大家补充在下方评论区,我会认真学习大家的意见,一起进步!


http://www.ppmy.cn/server/171210.html

相关文章

Java(六十)网络编程-TCP和UDP协议通讯

终于到网络编程部分了,我目前主业是做PHP的。PHP目前是专职用来做web的,但是java不同,他可以用来做其他的。 PHP中的http协议通讯是内置封装好的。http协议基于TCP协议。 Java先从TCP通讯和UDP通讯开始学起。 我们先来明确几个概念: 1:网络编程也叫做Socket编程,也叫做…

京准电钟解读:为何不能用网络上的NTP时间源服务器

京准电钟解读:为何不能用网络上的NTP时间源服务器 京准电钟解读:为何不能用网络上的NTP时间源服务器 通常是因为以下几个方面的原因: 安全性问题: NTP服务器可能被黑客操纵或成为攻击的目标,如果服务器被攻破&…

【QT】QLinearGradient 线性渐变类简单使用教程

目录 0.简介 1)qtDesigner中 2)实际执行 1.功能详述 3.举一反三的样式 0.简介 QLinearGradient 是 Qt 框架中的一个类,用于定义线性渐变效果(通过样式表设置)。它可以用来填充形状、背景或其他图形元素&#xff0…

【CSS】less基础(简单版)

less基础(简单版) 01.CSS的弊端02.LESS简介以及使用变量03.less编译easy less插件04.less嵌套05.less运算 01.CSS的弊端 如下图: 要手动计算倍数。 02.LESS简介以及使用变量 03.less编译easy less插件 安装easy less之后,保存le…

SQL笔记#SQL高级处理

一、窗口函数 1、什么是窗口函数 窗口函数也称为OLAP函数。OLAP的意思是对数据库数据进行实时分析处理。 2、窗口函数的语法 <窗口函数> OVER ( [PARTITION BY <列清单>] ORDER BY <排列用列清单> ) 能…

vue3中解决组件间 css 层级问题最佳实践(Teleport的使用)

定义&#xff1a; <Teleport> 是 Vue 3 中引入的一个内置组件&#xff0c;用于将组件的内容渲染到 DOM 中的指定位置&#xff0c;而不受组件层级结构的限制。这在处理模态框、通知、下拉菜单等需要脱离当前组件层级的情况下非常有用。 通俗来说&#xff0c;Teleport的功…

一个行为类似标准库find算法的模板

函数需要两个模板类型参数&#xff0c;一个表示函数的迭代器参数&#xff0c;另一个表示值的类型。 代码 #include<iostream> #include<string> #include<vector> #include<list>using namespace std;template <typename IterType,typename T>…

【云安全】云原生-Docker(六)Docker API 未授权访问

Docker API 未授权访问 是一个非常严重的安全漏洞&#xff0c;可能导致严重的安全风险。 什么是 Docker API &#xff1f; Docker API 是 Docker 容器平台提供的一组 RESTful API&#xff0c;用于与 Docker 守护程序进行通信和管理 Docker 容器。通过 Docker API&#xff0c;…