-
java语言中“==”和“equals”方法的区别
1.“==”操作符是用来比较两个变量的值是否相等,如比较的是引用对象,则比较引用对象的内存地址是否相同,也就是是否指向同一个对象。
2.“eqauls”方法仅用于比较引用对象,默认行为是比较引用对象所指向的对象值是否相等,无论引用对象是否指向的统一对象,只要两个对象的值是相等的,则返回true。
3.在实际开发中,也会在自定义对象中重写“eqauls”方法,如果重写,则自定义对象的比较方法以实际重写逻辑进行比较。
下面给出代码示例,并说明具体情况
1 int i=0; 2 int j=0; 3 int k=1 4 System.out.println(i==j);//true 5 System.out.println(i==k);//false
1 Integer i1=new Integer(0); 2 Integer j1=new Integer(0); 3 4 System.out.println(i1==j1);//因对象地址不一样,返回false 5 System.out.println(i1.equals(j1));//对象地址不一样,但两个对象的值相等,返回true
4.在此还有一个特殊说明,在java中String是特殊存储的,因String创建过程对资源消耗较大,java设计时String对象一旦被创建将不允许被修改,如果给字符串对象重新赋值,将重新指向另一个新的地址。
1 String s4="0"; 2 String s5=s4; 3 System.out.println(s4==s5);//true 4 s4="1"; 5 System.out.println(s4==s5);//s4被重新赋不同的值,指向不同的地址空间,返回false
5.如果使用直接赋值法创建两个String类型变量,赋相同的值,则java机制将会为第一个对象创建具体值并放入“字符串常量池”,当第二个对象被赋值时,直接指向“字符串常量池”中已有的值,如果使用new String()的方法赋值,则会在内存堆为该字符串对象创建一块新的内存用于存放值。
1 String s1="0";//创建字符串对象的值并放入“字符串常量池” 2 String s2="0";//引用“字符串常量池”中的已有值 3 String s3=new String("0");//在内存堆上创建对象,存放值 4 5 System.err.println(s1==s2);//指向同一个内存地址,返回true 6 System.out.println(s1.equals(s2));//内存地址中的值相同,返回true 7 8 System.out.println(s1==s3);//指向两个不同的地址,返回false 9 System.out.println(s1.equals(s3));//两个不同地址中的值相同,返回true
6.针对重写equals方法的示例就不展开解释了。
来源:https://www.cnblogs.com/yoran-yang/p/14889560.html
最新更新
带有参数的装饰器
类装饰器
django中的auth模块与admin后台管理
python的日期处理
字符串常用方法
基本数据类型概述
python-map()函数基本用法
python带你实现任意下载AcFun视频数据~
bbs项目之注册功能
变量的定义和使用
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型
TypeScript(2)WebStorm自动编译TypeScript配置