==介绍

它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。

基本数据类型: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()方法相关推荐

  1. String的equals方法原理

    一,前言: 我们都知道String的equals方法,是用来比较两个字符串的内容是否是相等的, 如果比较内存地址用的是==. 那么String的equals方法是如何来比较两个字符串的内容是否是相等的 ...

  2. object类中的equals与自定义equals方法详解

    object类中的equals与自定义equal方法详解 1.this怎么理解?this == obj表示什么? this就是当前你new出来的对象,这里指谁调用equal方法this指的就是谁,ob ...

  3. 问题2 String类equals 和 “==” 比较

    "==" 比较是否为同一对象,即涉及到内存地址是否相同 "String 中equals" 比较对象中的内容 "Object 中equals" ...

  4. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

    在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address {privat ...

  5. 详解 equals() 方法和 hashCode() 方法

    来源:编程迷思, www.cnblogs.com/kismetv/p/7191736.html 前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,has ...

  6. HashSet要重写equals方法和hashCode方法

    注:重要笔记在代码中注释有 hashSet去重: 即判断两个对象是否相等 1:会先调用对象的hashCode方法获得hash的值,如果set中哈希表里面没有对应的hash值,则将次对象存入set中 2 ...

  7. String的equals()和==

    场景: 场景:登入验证,查看用户密码是否正确,我获取数据的密码,同时和用户输入的进行对比,明明输入的密码正确,但是一直返回false. //user.getUPassword() = fdfsf // ...

  8. Java基础语法:重写equals方法和hasCode方法

    目录 一.为什么需要重写equals和hasCode方法 二.equals和hasCode解读 1.equals方法 2.hasCode方法 三.重写 四.参考资料 一.为什么需要重写equals和h ...

  9. java重写6,java重写equals()方法和hashCode()方法

    1.equals()方法和hashCode()方法是什么? equals()和hashCode()都是是Java中万物之源Object类中的方法: equals方法用于比较两个对象是否相同,Objec ...

最新文章

  1. nginx反向代理原理讲解
  2. 安装Autodesk Vault Server 总提示需要重启计算机?
  3. 三面腾讯,已拿offer
  4. webView的属性
  5. solr中文搜索倒排索引和数据存储结构
  6. scala akka_使用Scala,Play和Akka连接到RabbitMQ(AMQP)
  7. 2018软工实践第六次作业-团队选题报告
  8. u-boot新增命令后出现data abort
  9. php类和对象-作用,php 类和对象
  10. 3.3 计算神经网络的输出
  11. 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题
  12. Python安装常见问题:ModuleNotFoundError: No module named ‘_ctypes‘ 解决办法
  13. conda pip 安装NumPy速度不佳解决方案
  14. atitit 常见个人与企业与组织机构的信息化.docx
  15. 计算机用户注册表修改,如何通过注册表修改桌面计算机/用户文档图标
  16. AE快速输出GIF动图格式插件:GifGun for Mac(支持ae2022)
  17. n服登陆显示从服务器断开,魔兽世界N服卡认证、断开连接的解决方法
  18. 使用函数节流思想避免 SAP UI5 应用里按钮短时间内被高频重复点击试读版
  19. shell企业面试题
  20. 装windows操作系统教程

热门文章

  1. 成功解决pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Kingsoft WPS', '文档保存失败。', '', 3011, -214746725
  2. BlockChain:Python一步一步实现(流程最清楚)区块链底层技术流程图(理解一目了然,值得收藏)
  3. 蓝桥杯_算法训练_动态数组使用
  4. 【转载】OI生涯结束……在逸夫楼那些的日子里
  5. HDU 5274 Dylans loves tree(树链剖分)
  6. [C#] 等待启动的进程执行完毕
  7. 解决iOS设备屏幕切换时页面造成的问题
  8. iOS - 让view触发点击事件
  9. stm32 USART接收总线空闲中断--USART_IT_IDLE
  10. 文本挖掘预处理流程总结(2)— 英文