java中的equals方法与==适用范围

2024-01-11 06:18

本文主要是介绍java中的equals方法与==适用范围,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//【注意】:在此之前首先明确String s = "123" 和 String s = new String("123")的区别。先说String s = "123"表示在栈中创建一个变量s然后复制"123",之后如果创建String s1 = "123"时发现栈中已经有"123"了那么将s1指向这个123,也就是说此时s和s1指向的是同一个内存地址,这个可以用int hashCode = System.identityHashCode(s); int hashCode1 = System.identityHashCode(s1);看一下地址是确实相同的;再来说String s = new String("123"),如果创建完这个对象,下次创建String s1 = new String("123"),他和之前查看栈中是否有“123”不同而是直接创建一个新的对象,也就是开辟了一块儿新的内存,所以s和s1指向的是两块儿地址。

//对于==这个在学c++时就知String s = new String("123")道这是比较内存首地址的,也就是判断两个变量若内存首地址相同那么他们的值必然相同。而如果定义对象则不然,如下面代码中:String s = new String("123"); String ss = new String("123");这两个相当于是两个对象,那么此时这两个对象就是两块儿内存地址的引用,因此如果直接通过 s == ss这样比较内存首地址那肯定不同,对于这种申请字符串对象比较有equals方法,他是相当于将两块儿内存地址中的值取出来比较内容的,所以s.equals(ss)这是相同的。【注意】:在下面代码中,我们第一了实例变量a,b,c若新定义两个对象ob1, ob2那么每个对象都有三个私有属性,若项判断两个对象内容相同能否用equals呢?答案是不行的,此时要从写或者自定义一种比较方法,下面见代码:

package equals;public class equal {private int a;private int b;private int c;public static void main(String[] args) {String s = new String("123");String ss = new String("123");if(s == ss){System.out.println("==can compare s and ss");}else{System.out.println("==cannot compare s and ss");}if(s.equals(ss)){System.out.println("equals can compare s and ss");}else{System.out.println("equals cannot compare s and ss");}equal ob1 = new equal();equal ob2 = new equal();equal.setP(ob1);equal.setP(ob2);System.out.println("ob1:" + ob1.a + " " + ob1.b + " " + ob1.c);System.out.println("ob2:" + ob2.a + " " + ob2.b + " " + ob2.c);if(ob1 == ob2){System.out.println("==can compare ob1 and ob2");}else{System.out.println("==cannot compare ob1 and ob2");}if(equal.equalss(ob1, ob2)){System.out.println("equalss can compare ob1 and ob2");}else{System.out.println("equalss cannot compare ob1 and ob2");}return ;}/*** 通过调用setter和getter方法设置实例变量* @return*/public int getA() {return a;}public void setA(int a) {this.a = a;}public int getB() {return b;}public void setB(int b) {this.b = b;}public int getC() {return c;}public void setC(int c) {this.c = c;}public static void setP(equal ob){	//这个方法是设置自己定义的两个对象的实例变量ob.setA(1);ob.setB(2);ob.setC(3);}public static boolean equalss(equal a, equal b) {	//这个方法是对两个equal对象内容是否相同写的方法if(a.a == b.a && a.b == b.b && a.c == b.c){return true;}else{return false;}}
}

这篇关于java中的equals方法与==适用范围的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593417

相关文章

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.