==与equals()

Java中的equals()与==的区别与用法 /如果当前字符串对象和传入的字符串对象的编码方式相同 if (coder() == aString.coder()) { //如果当前字符串和传入的字符串都是Latin1编码,则调用StringLatin1类的equals方法进行比较;} // 如果是String类型的实例 if (anObject instanceof String) { ////Object类型的对象强制转换为String类型 String anotherString = (String)anObject;// 输出 false。 阅读详情

==和equals()的区别有两种情况:

      一种是针对object类一种是针对string 类

如下解释可看出对于object类来说==和equals()是一样的。但是由于String类重写了equals(),所以String 与Object又有所区别

Object的equals
public boolean equals (Object obj)

指示其他某个对象是否与此对象“相等”。

      Object 类的equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

       当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。  

equals 方法在非空对象引用上实现相等关系:

·  自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。

·  对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x)返回 true 时,x.equals(y) 才应返回true。

·  传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。

·  一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y)始终返回 true 或始终返回 false,前提是对象上equals 比较中所用的信息没有被修改。

·  对于任何非空引用值 x,x.equals(null) 都应返回 false。

string类的equals

public boolean equals(Object anObject)

将此字符串与指定的对象比较。当且仅当该参数不为null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。

如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false

 

下面来看一个例子:

class Y{
	int i;
}
public class X { 
public static void main(String [] args) {
	
	Y y=new Y();
	Y y1=new Y();
	y.i=10;
	y1.i=10;
	
	System.out.println("y.equals(y1):"+y.equals(y1));
	System.out.println("y==y1:"+(y==y1));

	
	String a=new String("abc");
	String a1=new String("abc");
	
	System.out.println("a.equals(a1):"+a.equals(a1));
	System.out.println("a==a1:"+(a==a1));
	
	String b="abc";
	String b1="abc";
	
	System.out.println("b.equals(b1):"+b.equals(b1));
	System.out.println("b.equals(b1):"+(b==b1));
	
	System.out.println("b.equals(a):"+b.equals(a));
	System.out.println("b==a:"+(b==a));

	System.out.println("a:"+a.hashCode());
	System.out.println("a1:"+a1.hashCode());
	System.out.println("b:"+b.hashCode());
	System.out.println("b1:"+b1.hashCode());
 } 
}
输出结果为:
y.equals(y1):false
y==y1:false
a.equals(a1):true
a==a1:false
b.equals(b1):true
b.equals(b1):true
b.equals(a):true
b==a:false
a:96354
a1:96354
b:96354
b1:96354 

      对于y引用equals和==是一样的,因为y和y1指向不同对象,故其对应值应该都为false

     String a=new String(“abc”); 处,系统(在指定内存中)先建立一个“abc”对象实例再通过String构建器创建“abc”的副本存入a指向的对象(在堆中,不在常量池中)中。如后面的a1同理。而在执行String b="abc";时系统不会再去开辟内存空间,而是直接在缓冲池中找到原先第一次创建的“abc”的,并指向它。同理b1.故对着几个引用变量调用用equals()因他们指向的对象实例对视相同的(查看结果的hashcode()值也是一样的),结果都应为true。因引用b和a不是指向同一个对象,所以b==a应该是false(其他的同理)。

注:1、String的一个构造函数:public String(String original)

初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

参考:http://blog.youkuaiyun.com/fiempty/article/details/8640467

初学java以上说明如有不妥之处,请见谅。


从零到一:STM32G431的DSP库集成与FFT实战避坑指南 本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。 阅读详情

相关推荐

Ubuntu 22.04蓝牙开关秒关?别慌,可能是这个Intel固件文件在搞鬼

本文深入解析Ubuntu 22.04蓝牙开关秒关问题,指出Intel固件文件缺失是常见原因,并提供详细修复方案。通过确认硬件型号、检查固件文件及智能替代方案,帮助用户快速解决蓝牙故障,提升系统稳定性。

weixin_30247307的博客 756

== 与 equals() 的区别

带你全面理解=和equals的区别,从底层到代码实例

NingMaoKing的博客 1628

Chrome红页误报?手把手教你通过Search Console快速解除安全警告

本文详细解析了Chrome红页误报的常见原因及解决方案,重点介绍如何通过Google Search Console快速解除安全警告。内容涵盖误报诊断、技术修复、申诉技巧及长效预防措施,帮助网站管理员有效应对Google Safe Browsing的误判问题,确保网站安全状态快速恢复。

a1b2c的博客 995

Java基础:==与equals()的区别

Java基础篇:详细讲述了Java中==和equals()的不同之处

PeaK欢迎大家评论留言,一起交流Java技术 7794

电源完整性仿真流程梳理

可根据仿真流程导图,一步一步的去设置完成仿真。仿真的关键,在于对电路回路的理解以及所放置的电压源与电流的合理性,对于去耦电容的选择,则需要根据谐振频率计算,从而选取有效滤波的容值。

csy17729158342的博客 3442

ubuntu系统禁止/开启内核自动更新

内核自动更新会导致驱动和内核版本不对应,导致驱动无法使用,所以需要禁止自动更新内核。本文介绍ubuntu系统禁止/开启内核更新的方法。

m0_50105717的博客 5289

Java 中 == 与 equals() 详解

在 Java 中,== 和 equals() 是用于比较两个变量是否相等的两种方式,但它们的行为和适用场景有所不同。== 用于比较基本数据类型的值或引用类型的内存地址,而 equals() 用于比较对象的内容是否逻辑相等,通常需要重写该方法。字符串、包装类和自定义对象的比较中,== 和 equals() 的结果可能不同,尤其是在处理字符串常量池、自动装箱缓存和数组时。为了避免常见的错误,建议在比较对象时优先使用 equals(),并在自定义类中正确重写 equals() 和 hashCode() 方法。此外

LiuYaoheng的博客 1330

第 9 篇:TMC2240 速度调节实战|STEP 信号生成 + 平滑调速算法(无抖动)

摘要:本文详细介绍了TMC2240电机调速方案,重点解决调速时电机抖动、丢步等问题。核心原理是通过STEP信号频率控制转速,结合平滑加减速算法避免电流冲击。文章从速度与STEP频率的数学关系入手,提供了定时器生成固定频率STEP信号的实现代码,并给出不同转速下的频率参数表。针对42步进电机+256微步细分场景,详细讲解了定时器初始化、中断处理及固定转速设置方法,帮助开发者实现稳定调速。全文包含可直接复用的代码片段,适合嵌入式开发者快速实现电机平滑调速功能。

BackCatK Chen的博客 1035

==与equals()的区别

==与equals()的区别 (博主是一个菜鸟,写的不好勿喷……) 一、==比较的是值是否相等 1.基本数据类型用==作比较,相当于关系运算符,例如: int a = 11; int b = 11; System.out.println(a == b); //结果为true 2.引用类型用==作比较的时候,比较的是两个对象的地址值是否相等(所指向的对象的地址,这里涉及到了堆、栈、常量池的知识点,...

weixin_44149237的博客 144

把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析

ABAP SQL窗口函数在不丢失明细记录的前提下,为每行数据提供组内统计和排名功能。它通过OVER子句定义计算窗口,支持三类函数:聚合型(AVG/SUM等)、排名型(ROW_NUMBER/RANK等)和取值型(LEAD/LAG)。相比GROUP BY会合并多行数据,窗口函数保留原始记录同时附加计算结果,特别适合需要保留明细又要展示统计信息的业务场景,如销售排名、客户分层分析等。语法核心是OVER子句,通过PARTITION BY分组,ORDER BY排序,可灵活定义计算范围。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1274

实时系统vxWorks - 虚拟机环境搭建

概述VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的...

不只会拍照的程序猿 7853

Java基础:equals()方法与==的区别

euqals和==区别介绍

愿你我都能实现自己的梦想 1356

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2580

c#中Equals()与==的比较

背景 平常写代码时,遇到两个String类型比较,在c#中直接使用==,但是回头想一想同样是面向对象的Java中==比较是对象在内存中的首地址,没理由c#会如此独特,为了了解c#的Equals()与==,写下这份笔记以提醒自己。 1.Equals()与==的相同之处 首先这里比较两个字符串,看看他们的结果是什么 string s1 = "Hello"; string s2 = "Hello"; string s3 = "hello"; s1.Equals(s2)// 结果为:true s1.Equals(s

m0_52390420的博客 1837

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

深入理解 equals() 方法以及与 == 的区别

这篇博客主要讲解了 equals() 与 == 的区别,并有完整的测试代码。

扬帆向海的博客 3164

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java中==与equals()方法的深度解析

特性==运算符equals()方法类型运算符Object类中的方法基本类型比较值不适用(基本类型没有equals()方法)引用类型比较内存地址(是否指向同一个对象)默认比较内存地址,可重写以比较对象内容用途判断两个变量是否指向同一个内存地址或基本值是否相等判断两个对象的内容是否相等(通常需要重写)最佳实践:基本数据类型比较:始终使用==运算符。引用数据类型比较如果你需要判断两个引用是否指向内存中的同一个对象,使用==运算符。如果你需要判断两个对象的内容是否相等,使用equals()方法。

weixin_56018532的博客 944

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Object.equals()与==

我的学习笔记

flsun_的博客 812

【equals()与 == 的区别】

这其实涉及到了内存中的常量池,常量池属于方法区的一部分,当运行到创建str3对象时,如果常量池中没有“123”,则在常量池中创建一个"123"对象,运行到str4对象时,由于“123”已经存在常量池,就直接使用,所以str3和str4对象其实是同一个对象,他们的地址引用相同。对于任何非null的引用值x、y与z,如果y.equals(x)返回true,y.equals(z)返回true,那么x.equals(z)也应返回true。对于任何非null的引用值x,x.equals(x)应返回true。

Leoon123的博客 187

Pandas知识点-equals()与==的区别

Pandas知识点-equals()与==的区别

weixin_43790276的博客 3124

equals() 与 == 的区别

equals() 与 == 的区别 ~ ~ ~ ~ ~ 1、 "==” 基本数据类型 基本数据类型用 == 比较,比较的是它们的值 示例代码 public class BaseType { public static void main(String[] args) { int a = 2; int b = 3; int c = 2;...

明天请叫我早点起床的博客 206

Java 中 == 与 equals() 的区别

Java中==与equals()的区别: ==用于基本类型比较值,引用类型比较内存地址 equals()是Object类方法,默认比较地址,但String/包装类等通过重写实现内容比较 关键区别:==判断"是否同一个对象",equals()判断"逻辑是否相等" 注意事项:字符串常量池、包装类缓存、equals与hashCode契约 实用建议:比较对象内容用equals(),基本类型用==,null安全比较推荐"常量.equals(变量)"

2303_77517907的博客 1061

java——equals()与==

jdk object中源码 public boolean equals(Object obj) { return (this == obj); } 那为什么老师们在教的时候说是equals()比较的是值,==比较的是地址? 原因为在String 的包装的类中,都对equals()进行了重写, 源码 public boolean equals(Object anObje...

qq_43646059的博客 203

java String中‘==’与equals()详解

本文主要讲解java 中String 中 ==与equals()的区别以及如何使用

Late_whale的博客 作者:代码搬运工老李的二师兄 1079

java中==与equals()方法

java中==与equals()的区别 一、== 首先我们来说一下== 1.基本数据类型: ==比较的是基本数据类型的原值,值相等为true否则为false; 2.引用类型: ==比较引用类型的地址,地址相等为true,否则为false; 这里有个特殊的值-128-127实在计算机中有缓存的 1>看以下代码: public static void ...

qq_41242758的博客 221

== 与 equals()的区别

== 与 equals() 区别 形同点: 都是比较两个值是否相等。 不同点: == 既可以比较基本数据类型也可以比较引用数据类型 比较基本数据类型时比较的时具体的数值 比较引用数据类型时比较的时两个引用数据类型在堆内存中的地址值 equals() 只能比较引用数据类型(包括包装类) 比较包装类时会将包装类自动拆箱然后比较具体的数值【例如Integer,见:图1-1】 比较封装的对象时,会先比较两个对象的地址值是否相同(判断是否时同一个对象),如果不是,则比对每个成员变量的

weixin_43626694的博客 249

Java面试-== 和 equals() 方法的区别与实现原理

但很多类(如StringIntegerList)都重写了equals(),让它比较内容而不是引用。equals()场景推荐做法原因比较基本类型使用==直接比较数值比较引用类型是否为同一对象使用==检查内存地址比较对象内容是否相等使用equals()逻辑相等性自定义类正确重写equals()和hashCode()确保在集合中正常工作比较字符串内容使用equals()安全、可靠字符串常量比较可用==(但不推荐)因为常量池,但行为不稳定性能敏感代码避免不必要的equals()

千淘万漉虽辛苦,吹尽狂沙始到金 2万+
上一篇: String a =new String(“abc”);和String b=”abc”;的区别
下一篇: 访问修饰符(public protect 默认friendly private),protected与friendly的区别
fiempty
博客等级 码龄15年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值