java中关于字符串相等的比较问题

24年电赛H题 | 想要小车走直线,正在调角度环,但不知道怎么把角度偏航角偏差转化成电机速度输出? 🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。 阅读详情

  Java中比较两个字符串是否相等的问题

  Java中,关于比较两个字符串是否相等的问题,经常会出现。下面将分析使用 ==(注意:Java中 = 是赋值运算符,== 是比较是否相等) 和 equals()方法 来比较两个字符串相等的区别:

  简单一句话,==比较的是两个字符串的地址是否为相等(同一个地址),equals()方法比较的是两个字符串对象的内容是否相同(当然,若两个字符串引用同一个地址,使用equals()比较也返回true)。

  字符串比较之所以看起来复杂,是因为值类型和引用类型两种数据类型的区别:值类型,例如 int 类型,当定义并初始化两个 int 类型的变量,int i = 1;int j = i,这两个变量 i , j 存放的的就是1这个值,使用 if(i == j)判断时,自然返回 i 和 j 是相等的 。引用类型,例如字符串类型, 当定义并初始化两个字符串类型的变量,String s = "abc"; String s2 = s; 实际上是只创建了一个String类型的对象,该对象的值为abc,而 s 和 s2 都引用这一个对象。(关于值类型和引用类型的内容稍后会更新)

 基础篇:

  下面将举出两个例子,分析两种情况下的字符串比较问题:

  例1. 使用new关键字声明两个String类型的变量

           

        
1 String s1 = new String("abc"); 2     String s2 = new String("abc"); 3 4      //分别使用.equals()和==进行比较 5     if(s1.equals(s2)) 6     { 7       System.out.println("可以使用 equals 来比较"); 8     }else 9     { 10       System.out.println("不可以使用 equals 来比较"); 11      } 12      if(s1 == s2) 13      { 14        System.out.println("可以使用== 来比较"); 15      }else   16     { 17        System.out.println("不可以使用== 来比较"); 18     }

  运行程序发现,用equals比较返回true,用 == 比较返回false。原因如下:

  因为 == 比较的是两个字符串对象的地址是否相同(是否为同一个地址),当使用new关键字创建一个对象的时候,该对象单独占据一块存储空间,存放llg这个字符串的值。所以s1 s2两个字符串虽然值相同,但是存储的地址不是一个地址,例如两个人都叫l“李四”但是他们的住址不在一个地方。当使用==来比较的时候,比较的是两个字符串的地址是否是同一个,所以返回false。但是使用equals()方法比较这两个字符串,将会比较两个字符串的值是否相同,所以返回true。

  例2. 正常情况下的字符串声明并定义。   

      //声明并初始化两个赋值一样的字符串

      String s1 = "abc";
      String s2 = "abc";

      //使用.equals()方法比较两个字符串是否相等
      if(s1.equals(s2))
      {
         System.out.println("可以使用 equals  来比较");
      }else
      {
         System.out.println("不可以使用 equals  来比较");
      }

      //使用 == 比较两个字符串是否相等
        if(s1 == s2)
        {
         System.out.println("可以使用 == 来比较");
        }else
        {
          System.out.println("不可以使用 == 来比较");
        }

  程序经过运行,发现两个方式都返回true。那么这是为什么呢?原因如下:

  一般我们认为,栈中存放基本类型的变量和对象的引用变量,而new出来的对象和数组存放在堆中。然而除此之外还有一块区域叫做常量池。像我们通常想String s1 = "abc"; 这样申明的字符串对象,其值就是存储在常量池中。当我们创建String s1 = "abc"这样一个对象之后,"abc"就存储到了常量池中,当我们创建引用String s2 = "abc" 的时候,Java底层会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,不会重新创建。所以使用 == 比较时,因为地址相同,所以比较的结果是true。

  那么问题回来了,既然是有常量池,是不是字符串如果不是new出来的(一般也不会这么new,声明字符串变量一般像例2这么写),那么这些字符串都是从常量池引用同一个对象,所以用 == 比较就行了?答案是可以。

为什么要有一个equals呢?难道只因为有人会故意new一个String出来吗?当然不是,初学者请先理解上面的内容。

进阶版:

近期更新

 

  

 

  

  

3大绝招!MySQL如何轻松搞定文本、图像和视频的多模态数据分析? 首先,让我们来了解一下“多模态”到底是什么意思。简单来说,多模态指的是能够同时处理不同类型数据(如文本、图像、音频等)的能力。传统的数据库往往只能专注于一种或几种特定类型的数据,比如关系型数据库主要处理结构化数据,而文档型数据库则更适合非结构化数据。但是现在,随着技术的进步,像MySQL这样的数据库也开始支持更加复杂的数据模型,允许我们在同一个系统内处理多种格式的数据。通过上述五个部分的详细介绍,相信你现在应该对如何利用MySQL进行多模态数据分析有了更清晰的认识。 阅读详情

相关推荐

Plot3d 网格数据格式

PLOT3D是一个计算机图形程序,旨在可视化计算流体力学的网格和解决方案。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。

weixin_62592231的博客 3720

如何判断两个字符串是否相等

1、java中字符串的比较是==比较引用,equals 比较值 so我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题 example1: String a="abc";String b="abc", 那么a==b将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存 一份,所以a和b指向的是同一个对象; example2:String a=new String("abc"); String b=new String("abc");..

qq_42690512的博客 3万+

告别卡顿!用AVPro Video在Unity 2022.3里流畅播放4K视频的保姆级配置流程

本文详细介绍了如何在Unity 2022.3中使用AVPro Video插件实现4K视频的流畅播放。从环境配置、插件选型到核心性能优化技巧,包括解码器设置、内存管理策略和多平台适配方案,帮助开发者彻底解决卡顿问题,提升视频播放体验。

weixin_32349561的博客 318

C语言:比较两个字符串是否相等

1) 使用strcmp进行比较 下面通过一个例子进行演示: #include <stdio.h> #include <string.h> int main(void) { char* str1 = "abc"; char* str2 = "abc"; if (strcmp(str1, str2) == 0) { printf("str1和str2相...

南雨兮 13万+

实战解析:利用Wireshark解密QQ通信协议

本文提供了一份利用Wireshark工具分析QQ通信协议的实战指南。文章详细介绍了从环境准备、捕获数据包到解析协议层的完整流程,重点演示了如何识别QQ号码字段、观察加密数据特征以及区分不同通信类型(如文本、文件传输)。通过此实践,读者可以深入理解网络分层模型和现代应用加密通信机制,提升网络协议分析与安全诊断能力。

weixin_29210727的博客 407

Python 爬虫实战:爬取 B 站 UP 主的全部视频数据

本文详细介绍了基于Python开发B站UP主视频数据爬虫的技术方案。通过分析B站API接口,使用requests库发送HTTP请求并处理JSON数据,结合pandas进行结构化存储。文章重点解决了接口鉴权、分页爬取、反爬策略等核心难点,实现获取视频标题、播放量、点赞数等关键指标。同时强调数据爬取需遵守平台规范,仅限技术研究使用。该方案为B站视频内容分析提供了可靠的数据采集基础,具有实际应用价值。

2503_91057718的博客 2492

判断两个字符串是否相等的更好方法

以上方法中,建议使用equals()方法进行字符串的相等比较,除非有特殊需求需要忽略大小写或处理null值的情况。使用这些方法可以更准确地比较字符串是否相等,避免常见的错误。StringUtils.equals()方法是Apache Commons Lang库提供的方法,用于比较字符串是否相等,可以处理null值。Objects.equals()方法可以比较两个对象是否相等,同时处理了可能为null的情况。注意:equals()方法用于比较字符串的内容是否相等,而不仅仅是比较对象的引用是否相等。

m0_75198698的博客 8001

ROS从入门到精通2-1:机器人3D可视化工具——Rviz

本文详细介绍了Rviz是什么?为什么要使用这个工具?清晰地列出了Rviz的安装流程和界面的基本功能元素;讲解了Rviz基本数据类型与话题,并用两个实例深入理解Rviz数据可视化的过程

FRIGIDWINTER的博客 5345

比较两个字符串值是否相等的两种方法(含源码解析)

public static void main(String[] args) { String str1 = "1234"; String str2 = "12345"; String str3 = "1234"; //方法一:使用StringUtilS工具类 /* =0则相等 StringUti...

睶 2万+

vmvare kali如何配置桥接模式进行上网

注意点:虚拟机可以PING通物理机,但是PING不通其他的网站。经过收集资料,得知由于是校园网连接,所以DHCP只能分配一个授权的IP地址给连接的主机,由于KALI是桥接物理机,物理机已经获得了这个授权的IP,所以导致桥接的虚拟机无法上网。所以不是因为配置的有问题,而是网络的安全设置导致了桥接失败。如果你是使用校园网,可以换个网络试试,使用校园网的时候,可能会遇到桥接失败。

猿小白的博客 1409

SAP_PP模块定额工艺路线简介

在 SAP PP(生产计划)模块中,定额工艺路线(Routing) 是生产制造流程中的核心主数据之一,用于定义制造一个产品所需的标准操作步骤。工艺路线详细描述了生产过程中的各个工序、使用的工作中心、标准作业时间、资源分配等信息,是进行生产计划、成本核算、排产控制、车间执行等功能的基础。

我小时候很黑的博客 763

西门子博图指令(比较操作)

博图V15比较指令功能块介绍

yue008的博客 3万+

物联网系列③——基于ESP8266与点灯科技平台的温湿度计设计(接入小爱同学)

物联网系列③——基于ESP8266与点灯科技平台的温湿度计设计(接入小爱同学)一、设计目标二、电路展示三、存在的问题四、代码五、需要注意的问题 一、设计目标       前一阵子偶然接触到点灯科技平台,产生了制作一块ESP8266电路板,拥有以下功能: 使用CH340对ESP8266进行程序下载 使用DHT11进行温湿度数据读取 使用点灯科技平台接入物联网,可通过手机APP获得室内温湿度 接入小爱同学,通过语音获取室内温湿度信息 Mico US

weixin_43278295的博客 8852

Java中比较两个字符串是否相等的问题

Java中,关于比较两个字符串是否相等的问题,经常会出现。下面将分析使用 ==(注意:Java中 = 是赋值运算符,== 是比较是否相等) 和 equals()方法 来比较两个字符串相等的区别:  简单一句话,==比较的是两个字符串的地址是否为相等(同一个地址),equals()方法比较的是两个字符串对象的内容是否相同(当然,若两个字符串引用同一个地址,使用equals()比较也返回true)。 ...

低调的嚣张 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java中字符串比较相等问题

Java中String比较equals()方法浅析

Jetty_Jie的博客 1058

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java:字符串用==比较相等失效问题

文章目录前言一、字符串比较两字符串相等的方式二、Java中字符串存储的方式1.公共存储池2.何时会创建新的位置3.创建新位置的解释三、字符串比较方式总结 前言 之前在写Android项目时,从数据库中读出字符串,与代码中存在的明文字符串用==比较时,发生了两个字符串字面量相等,却比较结果不相等的问题,回归Java基础思考过后做出如下的解释。 一、字符串比较两字符串相等的方式 学过Java的同学都知道,Java比较两个字符串相等时,通常情况下有两种方式 equals()方法 A==B判等 我们学习Java

qjyws的博客 2347

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java String 字符串常见的比较相等问题

Strings1="HelloWorld"; Strings2="World"; Strings3="HelloWorld";System.out.println(s3==s1+s2);//false System.out.println(s3.equals(s1+s2));//true System.out.println(s3==(...

weixin_34405354的博客 282

Java(不起眼的小问题)用==比较两个字符串内容相等

解析: 两个字符串在比较内容是否相等的时候,如果使用"==",当两个字符串不是指向内存中同一地址,那么即使这两个字符串内容一样,但是用"=="比较出来的结果也是false。所以两个字符串在比较内容是否相等的时候一定要使用"equals"方法。 示例: 运行如下代码得到结果: a == a2 return false a.equals(a2) return true 代码: publi...

weixin_43900952的博客 853

c++ char字符相等比较_Java字符串的十大问题总结

以下是有关Java字符串的十大常见问题。1.如何比较字符串?使用“ ==”还是使用equals()?简而言之,“ ==”测试引用是否相等,而equals()测试值是否相等。除非要检查两个字符串是否是同一对象,否则应始终使用equals()。2. 为什么对于安全敏感信息,char []优于String?字符串是不可变的,这意味着一旦创建它们,它们将保持不变,直到启动垃圾收集器。使用数组,您可以显式更...

weixin_39994949的博客 235

java 字符串相同字符串_java String 字符串常见的比较相等问题

Strings1="HelloWorld";Strings2="World";Strings3="HelloWorld";System.out.println(s3==s1+s2);//falseSystem.out.println(s3.equals(s1+s2));//trueSystem.out.println(s3==("Hello"+"Worl...

weixin_34583171的博客 481

c++ char字符相等比较_Java字符串的十大问题,你遇到过几个?

Java字符串的十大问题,你遇到过几个?以下是有关Java字符串的十大常见问题。1.如何比较字符串?使用"=="还是使用equals()?简而言之,"=="测试引用是否相等,而equals()测试值是否相等。除非要检查两个字符串是否是同一对象,否则应始终使用equals()。2.为什么对于安全敏感信息,char[]优于String?字符串是不可变的,这意味着一旦创建它们,它们将保持不变,...

weixin_39644915的博客 98
上一篇: 剑指offer第三章
下一篇: idea中Hibernate错误:无法解析表
linux12a
博客等级 码龄9年 20粉丝 0原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值