zoukankan      html  css  js  c++  java
  • == 和 equals() 方法的区别

    1. == 在比较基本数据类型时,是比较两边的数据的值是否相等

       // 整数类型
      int num1 = 1;
      // 双精度浮点数类型
      double num2 = 1.0;
      // 输出结果为 true
      System.out.println(num1 == num2);
      
    2. == 在比较引用数据类型时,比较的是两边对象的内存地址,也就是判断两个对象是否指向同一个内存对象

      // 第一种情况
      // 定义一个字符串str1
      String str1 = "test";
      // 将定义的字符串直接赋给str2,其实只是将对象str1的引用赋给了str2,此时两个对象指向同一个内存对象
      String str2 = str1;
      // 输出结果为 true
      System.out.println(str1 == str2);
      
      // 第二种情况
      // 定义一个字符串str1
      String str1 = "test";
      // 对于字符串类型,简单第一次创建一个字符串时,会在方法区中的常量池里面创建一个字符串
      // 等第二次在创建一个同样的字符串时,内存中不会再创建一个新的同样的字符串,而是直接将旧的字符串引用赋过去
      String str2 = "test";
      // 输出结果为 true
      System.out.println(str1 == str2);
      
      // 第三种情况
      // 使用new关键字在内存中创建一个对象str1
      String str1 = new String("test");
      // 使用new关键字在内存中创建一个对象str2
      String str2 = new String("test");
      // 使用new关键字是在内存中创建新的对象,两个对象在内存中指向的内存地址不一样,输出结果为 false
      System.out.println(str1 == str2);
      
    3. Object类中的equals()方法

      • 在Object类中的方法底层采用的其实是使用==进行比较,也就是说如果子类不对equals()方法进行重写默认比较的还是两个对象的内存地址(String类型除外,因为String类重写了equals()方法,比较的是两个字符串的内容)
      /**
       * 如果子类不对equals()方法进行重写默认比较的还是两个对象的内存地址
       * @anObject 需要比较的对象
       * @return   指向同一个对象返回true,否则返回false
       */
      public boolean equals(Object obj) {
          return (this == obj);
      }
      
    4. String类中的equals()方法

      /**
       * String类重写了Object类中的equals()方法,比较的是两个字符串的内容
       * @anObject 需要比较的对象
       * @return   两个字符串相等返回true,否则返回false
       */
      public boolean equals(Object anObject) {
          if (this == anObject) {
              return true;
          }
          if (anObject instanceof String) {
              String anotherString = (String)anObject;
              int n = value.length;
              if (n == anotherString.value.length) {
                  char v1[] = value;
                  char v2[] = anotherString.value;
                  int i = 0;
                  while (n-- != 0) {
                      if (v1[i] != v2[i])
                          return false;
                      i++;
                  }
                  return true;
              }
          }
          return false;
      }
      

      例如:

      // 定义一个字符串str1
      String str1 = new String("test");
      // 将定义的字符串直接赋给str2
      String str2 = new String("test");
      // 因为String类重写了Object类中的equals()方法,比较的是两个字符串的内容,输出结果为 true
      System.out.println(str1.equals(str1));
      
  • 相关阅读:
    Adobe Flex初记
    将获得datebox值的文本形式转为日期格式
    Java代码中获取Json的key值
    SortedMap与TreeMap的一个典型应用
    上传本地代码到github&&从github下载源码
    springMVC第一课--配置文件
    MySQL视图的优缺点以及如何创建视图
    一张图看懂IaaS, PaaS和SaaS的区别
    二十三种设计模式-六大原则
    数据库设计三大范式
  • 原文地址:https://www.cnblogs.com/wufuqin/p/14973958.html
Copyright © 2011-2022 走看看