• 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方法进行了重写的话,比较的是所指向的对象的内容。

  • 相关阅读:
    第三方接口开发规范
    项目经理、技术经理、team leader
    ibatis #和$符号的区别,传入字符串而不加引号
    WindowManager.LayoutParams详解
    AIDL 编译报can be an out parameter, so you must declare it as in, out or inout原因探究
    map里的keyset()和entryset()方法.
    android 使用代码实现 RelativeLayout布局
    Android中的Selector
    intentfilter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」
    找信息的方法
  • 原文地址:https://www.cnblogs.com/Janine-S/p/8125396.html
Copyright © 2020-2023  润新知