==与equals,String的equals()方法
==介绍
它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。
基本数据类型:byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。
引用数据类型:当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。
public class test {public static void main(String[] args) {int i=100;//基本数据类型int j=100;//基本数据类型Integer x=100;//引用数据类型Integer y=100;//引用数据类型Integer s=1000;Integer d=1000;Integer a=new Integer(100);//引用数据类型Integer b=new Integer(100);//引用数据类型System.out.println("i的地址"+System.identityHashCode(i));System.out.println("j的地址"+System.identityHashCode(j));System.out.println("x的地址"+System.identityHashCode(x));System.out.println("y的地址"+System.identityHashCode(y));System.out.println("a的地址"+System.identityHashCode(a));System.out.println("b的地址"+System.identityHashCode(b));//基本类型相互比较其中的值,得trueSystem.out.println("i==j:"+(i==j));//int的引用类型Integer与基本类型进行比较的时候,包装类会先进行自动拆箱,然后与基本类型进行值比较System.out.println("i==x:"+(i==x));//同上,包装类先拆箱为基本类型,然后值比较System.out.println("i==a:"+(i==a));//都是引用类型,比较的是地址//在-128~127的Integer值并且以Integer x = value;的方式赋值的参数,x会从包装类型自动拆箱成基本数据类型,以供重用System.out.println("x==y:"+(x==y));//都是引用类型,比较的是地址System.out.println("a==b:"+(a==b));//当s,d超出-128~127区间的时候,地址就变了,所以比较的结果就是false。System.out.println("s==d:"+(s==d));}
}
运行结果:
i的地址366712642
j的地址366712642
x的地址366712642
y的地址366712642
a的地址1829164700
b的地址2018699554
i==j:true
i==x:true
i==a:true
x==y:true
a==b:false
s==d:false
再看其它的包装器自动拆箱情况:
equals()方法介绍
它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
Boolean、Byte、Short、Integer、Long、Float、Doulbe、Character 8种基本类型的包装类都重写了 equals() 方法,所以比较的时候,如果内容相同,则返回 true,例如:
Integer a=new Integer(100);//引用数据类型
Integer b=new Integer(100);//引用数据类型
System.out.println("a==b:"+(a==b));
System.out.println(a.equals(b));
运行结果:
a==b:false
true
String类型的比较介绍
string是一个非常特殊的数据类型,它可以通过String x = value;的方式进行赋值,也可以通过String x = new
String(value)方式进行赋值。
String x = value;方式赋予的参数,会放入常量池内存块区域中;
String x = new String(value);方式赋予的参数,会放入堆内存区域中,当成对象处理。
public class test2 {public static void main(String[] args) {String a=new String("ab");//a为一个引用String b=new String("ab");//b为另一个引用,对象的内容一样String x="ab";//放在常量池中String y="ab";//从常量池中查找System.out.println("a的地址"+System.identityHashCode(a));System.out.println("b的地址"+System.identityHashCode(b));System.out.println("x的地址"+System.identityHashCode(x));System.out.println("y的地址"+System.identityHashCode(y));//地址相同,返回trueSystem.out.println("x==y:"+(x==y));//地址不同,非同一个对象,返回falseSystem.out.println("a==b:"+(a==b));//地址不同,值相同,返回trueSystem.out.println(a.equals(b));}
}
运行结果:
a的地址366712642
b的地址1829164700
x的地址2018699554
y的地址2018699554
x==y:true
a==b:false
true
为什么string的equals()方法比较返回true,因为string重写了equals()方法
如果需要比较某个对象是否相同,一定要重写equals(),比较其中的内容是否相同,如果相同,返回true;否则,返回false!
public class Demo2 {public static void main(String[] args) {String name1="张三"; // 直接赋值方式String name2=new String("张三"); // new方式String name3=name2; // 传递引用// ==比较的是引用System.out.println("name1==name2:"+(name1==name2));System.out.println("name1==name3:"+(name1==name3));System.out.println("name2==name3:"+(name2==name3));// equals比较的是具体内容System.out.println("name1.equals(name2):"+(name1.equals(name2)));System.out.println("name1.equals(name3:"+(name1.equals(name3)));System.out.println("name2.equals(name3):"+(name2.equals(name3)));}
}
运行输出:
name1==name2:false
name1==name3:false
name2==name3:true
name1.equals(name2):true
name1.equals(name3:true
name2.equals(name3):true
内存示意图:
==与equals,String的equals()方法相关推荐
- String的equals方法原理
一,前言: 我们都知道String的equals方法,是用来比较两个字符串的内容是否是相等的, 如果比较内存地址用的是==. 那么String的equals方法是如何来比较两个字符串的内容是否是相等的 ...
- object类中的equals与自定义equals方法详解
object类中的equals与自定义equal方法详解 1.this怎么理解?this == obj表示什么? this就是当前你new出来的对象,这里指谁调用equal方法this指的就是谁,ob ...
- 问题2 String类equals 和 “==” 比较
"==" 比较是否为同一对象,即涉及到内存地址是否相同 "String 中equals" 比较对象中的内容 "Object 中equals" ...
- JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address {privat ...
- 详解 equals() 方法和 hashCode() 方法
来源:编程迷思, www.cnblogs.com/kismetv/p/7191736.html 前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,has ...
- HashSet要重写equals方法和hashCode方法
注:重要笔记在代码中注释有 hashSet去重: 即判断两个对象是否相等 1:会先调用对象的hashCode方法获得hash的值,如果set中哈希表里面没有对应的hash值,则将次对象存入set中 2 ...
- String的equals()和==
场景: 场景:登入验证,查看用户密码是否正确,我获取数据的密码,同时和用户输入的进行对比,明明输入的密码正确,但是一直返回false. //user.getUPassword() = fdfsf // ...
- Java基础语法:重写equals方法和hasCode方法
目录 一.为什么需要重写equals和hasCode方法 二.equals和hasCode解读 1.equals方法 2.hasCode方法 三.重写 四.参考资料 一.为什么需要重写equals和h ...
- java重写6,java重写equals()方法和hashCode()方法
1.equals()方法和hashCode()方法是什么? equals()和hashCode()都是是Java中万物之源Object类中的方法: equals方法用于比较两个对象是否相同,Objec ...
最新文章
- nginx反向代理原理讲解
- 安装Autodesk Vault Server 总提示需要重启计算机?
- 三面腾讯,已拿offer
- webView的属性
- solr中文搜索倒排索引和数据存储结构
- scala akka_使用Scala,Play和Akka连接到RabbitMQ(AMQP)
- 2018软工实践第六次作业-团队选题报告
- u-boot新增命令后出现data abort
- php类和对象-作用,php 类和对象
- 3.3 计算神经网络的输出
- 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题
- Python安装常见问题:ModuleNotFoundError: No module named ‘_ctypes‘ 解决办法
- conda pip 安装NumPy速度不佳解决方案
- atitit 常见个人与企业与组织机构的信息化.docx
- 计算机用户注册表修改,如何通过注册表修改桌面计算机/用户文档图标
- AE快速输出GIF动图格式插件:GifGun for Mac(支持ae2022)
- n服登陆显示从服务器断开,魔兽世界N服卡认证、断开连接的解决方法
- 使用函数节流思想避免 SAP UI5 应用里按钮短时间内被高频重复点击试读版
- shell企业面试题
- 装windows操作系统教程
热门文章
- 成功解决pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Kingsoft WPS', '文档保存失败。', '', 3011, -214746725
- BlockChain:Python一步一步实现(流程最清楚)区块链底层技术流程图(理解一目了然,值得收藏)
- 蓝桥杯_算法训练_动态数组使用
- 【转载】OI生涯结束……在逸夫楼那些的日子里
- HDU 5274 Dylans loves tree(树链剖分)
- [C#] 等待启动的进程执行完毕
- 解决iOS设备屏幕切换时页面造成的问题
- iOS - 让view触发点击事件
- stm32 USART接收总线空闲中断--USART_IT_IDLE
- 文本挖掘预处理流程总结(2)— 英文