zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    磁盘io测试工具
    SqlServer性能瓶颈分析
    sqlserver镜像相关资料
    sqlserver数据库镜像运行模式
    Sqlserver2008 FileStream解决图片存储问题
    nginx负载均衡配置
    cacti-不出图形,cacti.log中出“ERROR: SQL Assoc Failed!
    Nginx的配置文件详解
    Linux环境(Centos) 安装mysql
    centos 命令行和图形桌面模式的切换
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/10648481.html
Copyright © 2011-2022 走看看