zoukankan      html  css  js  c++  java
  • java中的equals 与 ==

    总结来说:

      1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

        如果作用于引用类型的变量,则比较的是所指向的对象的地址

      2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

        如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

        诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

    简单来说,如果是普通基础数据类型,判断是否想等,就用==比较;

    如果是引用数据类型,== 和 equals方法比较的都是引用对象的地址,每个实例化的对象在内存中都是单独存放的,及时实例化两个对象属性都相同,也是不同的内存空间,所以会返回false;

    但是,String的equals比较的是字符串内容,因为String中重写了euquals方法。

    字符串还有一点需要注意:

    String s1 ="abc";
    String s2 = "abc";
    System.out.println(s1==s2); //输出 true,因为这里从字符串池里取,没有新创建对象
            
    String s3 = new String("abc");
    String s4 = new String("abc");
    System.out.println(s3==s4);  //输出 fasel,因为创建了两个不同内存空间的对象

    System.out.println(s1.equals(s2));System.out.println(s3.equals(s4) ; //输出都是 true,因为String已重写equals方法,比较的是内容
     

    Java中怎样判断两个对象是否相等呢?

      对象必须同时重写 hashCode() 和 equasl() 方法,自定义比较方式。例如:

      

     1 import java.util.*;
     2 
     3 /**
     4  * Set测试用例
     5  */
     6     class Student {
     7     private String name;
     8     private String number;
     9 
    10     Student(String name, String number) {
    11         this.name = name;
    12         this.number = number;
    13     }
    14 
    15     /**
    16      * 重载equals()和hashcode()
    17      */
    18     @Override
    19     public boolean equals(Object obj) {
    20         if(obj == null) {
    21             return false;
    22         }
    23         if(getClass() != obj.getClass()) {
    24             return false;
    25         }
    26         final Student other = (Student) obj;
    27         return true;
    28     }
    29 
    30     @Override
    31     public int hashCode() {
    32         int hash = 5;
    33         hash = 13 * hash + (this.name != null ? this.name.hashCode() : 0);
    34         hash = 13 * hash + (this.number != null ? this.number.hashCode() : 0);
    35         return hash;
    36     }
    37 
    38 
    39     @Override
    40     public String toString() {
    41         return String.format("(%s, %s)", name, number);
    42     }
    43 }
    44 
    45     public class Students {
    46         public static void main(String[] args) {
    47             Set set = new HashSet();
    48             set.add(new Student("Tom", "001"));
    49             set.add(new Student("Sam", "002"));
    50             set.add(new Student("Tom", "001"));
    51             System.out.println(set); //此时set中只有两个元素:[(Tom,001),(Sam,002)]
    52         }
    53     }

    其他:

    对象的toString方法,如果对象中没有重写toString方法,则返回的是类名+@+哈希码,例如:System.out.println(Studnet);  将打印出: Student@6e1408

  • 相关阅读:
    读书笔记4瞬时相应网站的高性能架构
    读书笔记3大型网站的架构要素
    读书笔记2大型网站的架构模式
    可用的rtmp卫视直播地址
    html中的特殊符号表示法
    深入理解JS原型链与继承
    css3 media媒体查询器用法总结
    HTML条件注释用法诠释
    jQuery中$符号冲突问题 (转载)
    JS 输出对象的属性以及方法[转载]
  • 原文地址:https://www.cnblogs.com/crazytrip/p/7154162.html
Copyright © 2011-2022 走看看