• equals 与 == 的区别


    equals 是 用来比较二个对象内容是否相等。

    == 是用来比较二个对象的内存是否相等。

    public void testString(){
    String s1="123";
    String s2="123";
    String s3=new String("123");
    String s4=new String("123");
    System.out.println(s1==s2);
    System.out.println(s1==s3);
    System.out.println(s3==s4);
    System.out.println("----------------");
    System.out.println(s1.equals(s2));
    System.out.println(s1.equals(s3));
    System.out.println(s3.equals(s4));
    }
    运行结果:

    true
    false
    false
    ----------------
    true
    true
    true

    由上面的运行结果,得出结论。

    基本数据类型:byte,short,char,int,long,float,double,boolean 

    栈中存放基本的数据类型变量和引用数据类型变量,而new出来的对象和数组存放在堆里面。

    而像我们声明的对象String s1="aaa"; 是存放在常量池中 ,当我们在创建String s2="aaa";的时候它会先去常量池中查找是否存在"abc"这个对象,如果存在就会让s2直接指向该对象而不会再去创建该对象。所以得出结果s1、s2  使用 equals、== 比较结果都为true。

    我们 new 出来的对象(s3、s4)都会创建单独的内存空间,所以它们的内容虽然相同,但是它们的内存空间却不想等。所以得出equals 比较结果为true,== 比较为false。

    s1与s3比较,它们的内存空间不同,内容相等,所以 == 比较结果为false,equals比较结果为true。

    Java中对Equals的要求 :

    1.自反性 :对任意引用值X,x.equals(x)的返回值一定为true.
    2.对称性: 对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
    3.传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
    4.一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
    5.非空性:任何非空的引用值X,x.equals(null)的返回值一定为false

  • 相关阅读:
    Tasklet机制
    linux 内核与用户空间通信之netlink使用方法
    inline总结与思考
    PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
    2410下DMA驱动源码分析
    [转]数据库建立索引的一般依据
    [转]性能调优的步骤
    [原] JT SQL Server 性能调优札记之二
    [转]SQL Server 2000执行计划成本(5/5)
    [转]SQL Server 2000执行计划成本(3/5)
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/10648481.html
Copyright © 2020-2023  润新知