zoukankan      html  css  js  c++  java
  • java 中 == 与 equals 的区别

       ==  比较两个操作数的值之间的关系

      equals是基类Object下的方法,用来比较两个对象的引用是否相等,即是否指向同一个对象(equals无法作用于基本数据类型)。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      1.java中有8中基本数据类型 byte、int(2 byte)、short(4 byte)、long(8 byte)、float(4 byte)、double(8 byte)、char(2 byte)、boolean。在基本数据类型中,变量直接存储的是 “值”。

    int n = 10;
    int m = 10;
    System.out.println(n==m);          //返回true
    System.out.println(n.equals(m)); //报错:基本数据类型无法使用equals

      n,m是基本数据类型,所以 == 比较的是n,m值本事,即 10 == 10。

      

      2.而对于非基本数据类型的变量,引用类型变量,如String,包装类等。(Java 语言为每一个内置数据类型提供了对应的包装类:Integer、Long、Byte、Double、Float、Short都是抽象类 Number 的子类。) 引用类型的变量存储的并不是 “值”本身,而是于其关联的对象在内存中的地址。所以 == 操作符比较的是两个地址,而String,包装类等很多对euqals进行了重写,使其比较的是数据所指向的地址中的内容。

    Integer a = 127;
    Integer b = 127;
    System.out.println(a==b);        //返回 true :Java 会对 -127~127 的整数进行缓存,引用类型变量一般不用 == 进行判等
    System.out.println(a.equals(b)); //返回 true

    Integer c = 128; Integer d = 128; System.out.println(c==d); //返回 false System.out.println(c.equals(d)); //返回 true

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    总结:

    1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

              如果作用于引用类型的变量,则比较的是所指向的对象的地址。

    2)对于equals,注意:equals方法不能作用于基本数据类型的变量

        如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

        诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

  • 相关阅读:
    Microsoft 基准安全分析器(MBSA)
    神奇的C++模版
    Windows下的Memcache安装
    BisonFlex 笔记
    虚函数背后的秘密
    如何切换SecureCRT的帐号
    动态生成JS 实现 .NET 网站广告管理
    fatal error C1853 预编译头文件来自编译器的早期版本 解决方法
    解决 unresolved external symbol 无法解析 _send@16
    linux远程登录
  • 原文地址:https://www.cnblogs.com/Janine-S/p/8125396.html
Copyright © 2011-2022 走看看