java中==与equel的区别

告别Quartus II的漫长等待:用VSCode+iverilog+GTKWave搭建你的轻量级Verilog仿真环境(2024保姆级教程) 本文详细介绍了如何利用VSCode、iverilog和GTKWave构建高效的Verilog/SystemVerilog开发环境,替代传统的Quartus II和ModelSim工具。通过2024年最新的保姆级教程,帮助开发者实现秒级启动、低资源消耗的轻量级仿真环境,显著提升数字电路设计的开发效率和调试体验。 阅读详情

点击打开转载链接

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

    ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

    ==比较的是2个对象的地址,而equals比较的是2个对象的内容。

    显然,当equals为true时,==不一定为true;

    一、String中的equals和==

    1、

    public class TestString {

    public static void main(String[] args) {

    String s1 = "Monday";

    String s2 = "Monday";

    }

    }

    上面这段程序中,到底有几个对象呢?

    来检测一下吧,稍微改动一下程序

    public class TestString {

    public static void main(String[] args) {

    String s1 = "Monday";

    String s2 = "Monday";

    if (s1 == s2)

    System.out.println("s1 == s2");

    else

    System.out.println("s1 != s2");

    }

    }

    编译并运行程序,输出:s1 == s2说明:s1 与 s2 引用同一个 String 对象 -- "Monday"!

    2.再稍微改动一下程序,会有更奇怪的发现:

    public class TestString {

    public static void main(String[] args) {

    String s1 = "Monday";

    String s2 = new String("Monday");

    if (s1 == s2)

    System.out.println("s1 == s2");

    else

    System.out.println("s1 != s2");

    if (s1.equals(s2)) System.out.println("s1 equals s2");

    else

    System.out.println("s1 not equals s2");

    }

    }

我们将s2用new操作符创建

    程序输出:

    s1 != s2

    s1 equals s2

    说明:s1 s2分别引用了两个"Monday"String对象

    3. 字符串缓冲池

    原来,程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1

    将s2引用s1所引用的对象"Monday"

    第二段程序中,使用了 new 操作符,他明白的告诉程序:"我要一个新的!不要旧的!"于是一个新的"Monday"Sting对象被创建在内存中。他们的值相同,但是位置不同,一个在池中游泳一个在岸边休息。哎呀,真是资源浪费,明明是一样的非要分开做什么呢?

    4.

    再次更改程序:

    public class TestString {

    public static void main(String[] args) {

    String s1 = "Monday";

    String s2 = new String("Monday");

    s2 = s2.intern();

    if (s1 == s2)

    System.out.println("s1 == s2");

    else

    System.out.println("s1 != s2");

    if (s1.equals(s2)) System.out.println("s1 equals s2");

    else

    System.out.println("s1 not equals s2");

    }

    }

    这次加入:s2 = s2.intern();

    程序输出:

    s1 == s2

    s1 equals s2

    原来,(java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方法没什么用处。但实际上,它做了个小动作:检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会把"abc"添加到字符串池中,然后再返回它的引用。

    )

    更好的办法:

    把所有的String都intern()到缓冲池去吧

    最好在用到new的时候就进行这个操作

    String s2 = new String("Monday").intern();

    然后就可以用==比较两个字符串的值了

 

二、简单数据类型和封装类中的equals和==

    Java为每一个简单数据类型提供了一个封装类,每个基本数据类型可以封装成对象类型。

    除int(Integer)和char(Character),其余类型首字母大写即成封装类类型名。double (Double), float(Float),long(Long), short(Short),byte(Byte),boolean(Boolean).

    以int和Integer为例说明

    Java中int和Integer区别如下:

    1.int是基本的数据类型,默认值可以为0;2.Integer是int的封装类,默认值为null;3.int和Integer都可以表示某一个数值;4.int和Integer不能够互用,因为他们两种不同的数据类型;

    int a1=1;

    int a2=1;

    Integer b1 =new Integer (1);

    Integer b2 =new Integer (1);

  ------------------------------

    a1==a2 这个是成立的,很简单,都知道a1==b1 这个是不成立的.表达式的值为 false ,它们是不同的数据类型b1==b2 这个也是不成立的.表达式的值为 false,虽然是相同的数据类型,但是它们是两个对象,==比较的是2个对象的地址,它们的地址是不相等的,内容相等都是1;

    b1.equals(b2)==true 这个是成立的,表达式的值为 true. 相同数据类型,两个对象,地址不同,内容相同, quals比较的是2个对象的内容,所以成立。

    (a.equals(b),因为equals比较的是两个对象,所以a,b都不能为基本数据类型,否则会出编译错误。)同理,其它的封装类和基本类型也是这样的.

    java中equals和==的区别

    ==比较的是2个对象的地址,而equals比较的是2个对象的内容。

    三、其他类怎么使用equals和==

    API里的类大部分都重写了equals方法,没有重写的一般是自己写的类,如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的,你可以看源码。

    四、java里equals和hashCode之间什么关系

    只是为了维护 hashCode 方法的常规协定,才要求用equals比较的两个对象的hashCode相同. equals()和hashCode()都来自java.lang.Object.你当然可以重写.

    比如a.equals(b).仅当a的内存地址相等时,才返回true.当然如String等类已经对这个方法进行了重写,比较的就不再是内存地址了. hashCode()的值也是与内存地址相关的.所以仅当内存地址相等时,hashCode才相等.

    同样很多类也重写了这个方法,还是以String为例:

    public int hashCode() {

    int h = hash;

    if (h == 0) {

    int off = offset;

    char val[] = value;

    int len = count;

    for (int i = 0; i < len; i++) {

    h = 31*h + val[off++];

    }

    hash = h;

    }

    return h;

    }

    就不在与内存地址相关了.这样做是为了保证用equals比较返回为true的两个对象,他们的hashCode是相同的.

    所以一般重写equals的时候都会重写hashCode().当然,这个相当于一个约定,一个协议.你不这么做并不会错.

    五、hashCode

    在一般的应用中你不需要了解hashcode的用法,但当你用到hashmap,hashset等集合类时要注意下hashcode。

    你想通过一个object的key来拿hashmap的value,hashmap的工作方法是,通过你传入的object的hashcode在内存中找地址,当找到这个地址后再通过equals方法来比较这个地址中的内容是否和你原来放进去的一样,一样就取出value。

    所以这里要匹配2部分,hashcode和equals但假如说你new一个object作为key去拿value是永远得不到结果的,因为每次new一个object,这个object的hashcode是永远不同的,所以我们要重写hashcode,你可以令你的hashcode是object中的一个恒量,这样永远可以通过你的object的hashcode来找到key的地址,然后你要重写你的equals方法,使内存中的内容也相等。。。


Vibe Coding 实战指南:用 3 类社区资源实现每周高效追新 介绍一种分层技术雷达校准方法,通过领域过滤器(L1技术栈锚定、L2能力映射、L3场景收敛)精准筛选AI编程相关更新,结合可验证的Shell命令与CI任务卡,将信息过载压缩为可执行、可审计的工程实践。 阅读详情

相关推荐

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 675

== 和equery的区别究竟是什么呢

前言 2020/11/23,正在加班的我想要去专研一下面试题,为了能给自己动力所以就突然想要写博客取记录自己的成长,然后成为一条咸鱼专心追热巴!!! 第一个面试题是什么呢? == 和equals的区别(一个基础题,送上拙见) 先来看一下其余大佬写的一些理解 1、== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址) 2、equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况: 情况1

weixin_44994494的博客 1153

Golang实现企业级AI智能体安全合规自动化检测系统

需求:自动化解析欧盟AI法案、中国网络安全法、美国NIST框架等多国法规,提取具体合规要求并映射到企业技术实现。技术挑战法规文本非结构化,语义复杂,存在大量法律术语与技术术语交叉多语言支持(中文、英文、欧盟24种官方语言)法规动态更新(平均每季度更新2-3次)架构创新性:提出了"规则引擎+AI模型+实时监控"的混合架构,兼顾了合规要求的明确性与智能体行为的动态性。性能突破:通过Golang协程、多级缓存、数据库优化等技术,实现了12,800 req/s的高吞吐量和38ms的低延迟。准确性提升。

shao.bing的专栏 725

java中equals和==的区别

 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。     ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。     equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。     ==比较的是2个对象的地址,而equals比较的是2...

juchanghuan的专栏 538

window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)

文章目录一、卸载node二、安装nvm三、配置路径和下载源四、使用nvm安装node五、nvm常用命令六、卸载nvm七、遇到的问题 nvm 全名 node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 一、卸载node 如果你已经安装了node,那么你需要先卸载node,如果你没有安装那直接跳过这一步到下一步。 打开控制面板 -> 打开程序和功能 -> 右上角搜索输入node -> 右键卸载 为了确保彻底

HuangsTing的博客 41万+

天池长期赛:二手车价格预测(422方案分享)

本次比赛是一次很好的锻炼数据挖掘能力的入门赛,从EDA-数据清洗-特征工程-模型调参-模型融合,能够完整的学习到大数据的分析和挖掘,值得历练。

weixin_46685991的博客 1万+

==和equals有什么区别?彻底搞懂

java程序中测试两个变量是否相等有两种方式,一种是利用==运算符,一种是利用equals()方法。

阿杰 4316

华为OD机试 - 魔法收积木 - 二进制(Java 新系统 200分)

华为OD机试 新系统 题库疯狂收录中,刷题。

学Java,找哪吒 444

java中“==”与“equase”的区别

A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。 B.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。 C.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。 D.一个类如果没有定义equals方法,它将默认继承Ob

m15225134308的专栏 2053

太空安全卫士:基于YOLOv5的空间态势感知系统(实现轨道碰撞预警与太空环境保护)

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护宇宙安全”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了航天监测的哪些痛点、YOLOv5在太空目标检测中的性能优势、系统未来能怎么优化(比如对接航天监测网络、实现实时轨道预测)。未来,这个系统还能往“更智能”的方向发展:比如结合轨道计算预测碰撞风险、开发移动端APP让天文爱好者参与太空垃圾上报、在航天任务中实现全自动避障决策……想象空间很大。

m0_71589036的博客 91

图像做旧算法原理及代码解释

该图像做旧算法主要通过一系列的图像处理操作来模拟旧照片的效果。整体流程包括:首先对输入图像进行颜色调整,降低饱和度并增加黄色调以营造出旧照片的色彩风格;接着添加高斯噪声来模拟旧照片可能存在的颗粒感;最后通过在图像上随机绘制线条来模拟旧照片的划痕和瑕疵。综上所述,该图像做旧算法通过对颜色的调整(包括饱和度降低、色相偏移)、添加高斯噪声以及模拟划痕和瑕疵等一系列操作,从多个方面模拟了旧照片的特征。

m0_44975814的博客 902

mybatis 中 == 和=的区别

在mybatis中如果需要比较用==或者eq不能用=

qq_39253888的博客 1134

Yield Management软件:Lam Research二次开发_(5).缺陷分析与分类方法

在半导体制造过程中,缺陷分析和分类是提高良率管理(Yield Management)的关键步骤。通过准确地识别和分类缺陷,可以更好地理解工艺过程中的问题,从而采取有效的措施来提高生产效率和产品质量。本节将详细介绍缺陷分析和分类的方法,包括缺陷检测、特征提取、分类算法及其在Lam Research软件中的应用。

2401_87715305的博客 690

Java中==和equel的区别

java中的数据类型,可分为两类: 基本数据类型,也称原始数据类型。 byte short char int long float double boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false

shengzhu1的博客 882

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

十字对开冰箱选购与安装指南:超薄一级能效大容量实测

冰箱作为厨房核心家电,选购时需兼顾容量、能效与安装尺寸。十字对开设计通过分区存储提升食材管理效率,一级能效则长期降低用电成本。超薄嵌入机身适配现代厨房定制化需求,但实际安装需预留散热空间并验证开门角度。本文基于大容量冰箱的通用选购逻辑,结合统帅LTD-510WS9U1的实测经验,从静置通电、调平验证到门封检查,提供一套可复用的安装调试与故障排查方法,帮助用户在装修或换机时少踩坑。

weixin_34292402的博客 341

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java中的source_java中==与equel的区别(source)

转载自:http://xiashengchao.iteye.com/blog/753409值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即堆中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即栈中的内容是否相同。...

weixin_28839549的博客 344

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java中5 2表示_java中==与equel的区别(source)

转载自:http://xiashengchao.iteye.com/blog/753409值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即堆中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即栈中的内容是否相同。...

weixin_42628280的博客 177

Java基础之==,equal的区别(温故而知新)-----点点滴滴的积累

==和equal的区别和概念

秉持长期主义,保持长期生命力和竞争力 685

==和equel

==: 1、比较的是操作符两端的操作数是否是同一个对象 2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。 3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为TRUE,如: int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆 equals: 1、比较的是两个对象的内容是否一样 Str

youmengdaigu的专栏 640

字符串比较==和equel区别

字符串 ==比较,不稳定 本机代码运行中 equals  比较内容 自定义对象比较  == equals == 不能比较 equals 是比较 object类的方法 :就是用==比较的内存地址

su_______mo的博客 423
上一篇: Java并发编程:深入剖析ThreadLocal
下一篇: java JDK 动态代理(如何使用,以及工作原理解析)
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值