博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
==与equal()的区别
阅读量:5875 次
发布时间:2019-06-19

本文共 1882 字,大约阅读时间需要 6 分钟。

在看区别之前,首先来看下以下代码:

public class TestEqual {    /**     * @param args     *  I am not responsible of this code.      *  They made me write it, against my will.     */    public static void main(String[] args) {        // TODO Auto-generated method stub        String a = "111";        String b = "111";        String c = new String("111");              int a1 = 111;        int b1 = 111;        Integer c1 = new Integer(111);        Integer c2 = new Integer(111);                System.out.println(a == b);  //true        System.out.println(a == c);     //false        System.out.println(c == b);  //false        System.out.println(a.equals(c)); //true        System.out.println("**************************");        System.out.println(a1 == b1); //true        System.out.println(a1 == c1); //true        System.out.println(c2 == c1); //false        System.out.println(a.equals(c1)); //false        System.out.println(c1.equals(c2)); //true    }}

  (一) "=="

  首先先看定义的三个字符串对象,他们的值都是111。但a==b时,值为true 而 a==c时,为false,为什么呢?

  String a = "111"  当表达式执行的时候,会首先去内存中的字符串池中去找,看有没有"111"这个字符串,如果没有的话,就在字符串池中创建一个,等String b = "111"时,则a,b其实是指向了同一片内存地址空间。而String c = new String("111")则不会去字符串池中查找,是直接创建一个"111",所以String c = new String("111")时,它会再创建一个,所以这时a,c指向的是不同的内存空间。

  当==用于比较对象的引用时,实质上是比较两个引用的地址是否相等。其中java的双引号表达式本身就会创建一个字符串对象。

  其次再看定义的两个int型变量以及两个Integer对象。a1==b1毫无疑问他两值相等,为true。而a1==c1也为true,这又是为什么呢?

  其实自jdk1.5之后,基本类型的所对应的引用类型可以自动转换成基本类型与基本类型进行值比较.(自动拆箱)..而a1==c1实质上变成了a1== c1.intValue() 

  当==用于比较基本数据类型时,实质上就是比较他们的值是否相同。 

  (二)equal()

    由a.equals(c)与c1.equals(c2)他们值为true,看出他们比较的对象是相同的。

  equal()来判断两个对象是否相等。对于字符串来说,也是比较字符串的字符序列是否相等。

   equals方法可以参考API中的java.lang.Object和java.lang.String。

  参考:   http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html

      http://blog.sina.com.cn/s/blog_79333b2c0100xd34.html

  结果的得出与上边叙述无关系,只做解释而已

转载于:https://www.cnblogs.com/hardwork/p/4114950.html

你可能感兴趣的文章
NestJS 脑图
查看>>
我的友情链接
查看>>
Html body的滚动条禁止与启用
查看>>
Tengine新增nginx upstream模块的使用
查看>>
多媒体工具Mediainfo
查看>>
1-小程序
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
Mind_Manager_2
查看>>
手动升级 Confluence - 规划你的升级
查看>>
汽车常识全面介绍 - 悬挂系统
查看>>
电子政务方向:We7.Cloud政府云门户
查看>>
虚拟机Centos7连接Internet
查看>>
ansible 基本操作(初试)
查看>>
更改tomcat的根目录路径
查看>>
51nod 1292 字符串中的最大值V2(后缀自动机)
查看>>
加快ALTER TABLE 操作速度
查看>>
学习笔记之软考数据库系统工程师教程(第一版)
查看>>
基本网络概念
查看>>
将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1 RC 1
查看>>