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

    我们在一开始学习Java的时候
    1."==" 的作用是判断两个对象的地址是不是相等。即判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)
    2.equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
      
    ①类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
       ②类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
     例:
    public static void main(String[] args) {
      int x = 1;
      int y = 1;
      System.out.println(x == y);
      String z = new String("hello");
      String z1 = new String("hello");
      String z2 = new String("hello");
      System.out.println(z1 == z2);
      z1 = z;
      z2 = z;
      System.out.println(z1 == z2);
     }
    输出结果分别是 true;false;true;
    对于基本类型的变量,变量直接储存的是"值",因此在用关系操作符==来进行比较时,比较的就是 “值” 本身。要注意浮点型和整型都是有符号类型的,而char是无符号类型的。
    而引用数据类型引用类型的变量存储的并不是 “值”本身,而是于其关联的对象在内存中的地址。

    这句话声明了一个引用类型的变量,此时它并没有和任何对象关联。

    String z1 =new String("Hello");

      而 通过new String("hello")来产生一个对象(也称作为类String的一个实例),并将这个对象和z1进行绑定:

      z1= new String("hello");

      此时变量z1中存储的是它指向的对象在内存中的存储地址,并不是“值”本身,也就是说并不是直接存储的字符串"hello"。

      因此在用==对z1和z2进行第一次比较时,得到的结果是false。因此它们分别指向的是不同的对象,也就是说它们实际存储的内存地址不同。

      而在第二次比较时,都让z1和z2指向了z指向的对象,所以结果为true.

    String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。

      其他的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。

     
  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/Jc1995/p/12951510.html
Copyright © 2011-2022 走看看