zoukankan      html  css  js  c++  java
  • java学习——equals()和==的比较

    equals 方法是 java.lang.Object 类的方法。


    下面从两个方面来说明equals()和==的差别:
    (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
        “==”比较两个变量本身的值,即两个对象在内存中的首地址
        “equals()”比较字符串中所包含的内容是否相同


      【例子】    

    String s1,s2,s3 = "abc", s4 ="abc" ;
    s1 = new String("abc");
    s2 = new String("abc");
    
    s1==s2; //false,两个变量的内存地址不一样,也就是说它们指向的对象不 一样
    s1.equals(s2);  //  true,两个变量所包含的内容是abc,故相等。
    s1 == s3;  //false
    s1.equals(s3); //true
    s3 == s4; //true,字符串常量所生成的变量,存放于常量池中,故其中所存放的内存地址是相等的
    s3.equals(s4);  //true

      【注意】

        在字符串构建中有个特殊字符串类型StringBuffer,StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
    Object类中的equals方法是用来比较“地址”的。所以会有如下情形出现:

    StringBuffer s1 = new StringBuffer("a");
    
    StringBuffer s2 = new StringBuffer("a");
    
     s1.equals(s2) //false

    (2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

    A obj1 = new A();
    A obj2 = new A();
    obj1==obj2; //false
    obj1.equals(obj2); //false
    
    A obj1 = new A();
    obj2 = obj1;
    obj1==obj2; //true
    obj1.equals(obj2); //true

    【总结】:

      1. equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。

        == 比较符是比较指向的对象是否相同的,也就是对象在对内存中的的首地址。

      2. equals 方法是 java.lang.Object 类的方法,Object类中的equals方法是用来比较“地址”的,但是String类中重新定义了equals这个方法,而且比较的是值,而不是地址。

      3. 如果是基本类型(byte, short, int, long, float, double, char,boolean)比较,那么只能用==来比较,不能用equals();

      4. 对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。

      5. 注意一个基本的原则:在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法

    重写equals()方法的一般规则:

    a、先用“==”判断是否相等(是否指向同一对象)。
     
    b、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。
     
    c、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。
     
    d、判断类的成员是否对应相等。往下就随意发挥了。

    【例子】判断被比较对象user的username 属性和待比较对象的username相等:

        public class User {    
            private String username;  
            
            @Override  
            public boolean equals(Object obj){  
                if(obj == null){  
                    return false;  
                }else {           
                        if(this.getClass() == obj.getClass()){  
                                User u = (User) obj;  
                                if(this.getUsername().equals(u.getUsername())){  
                                    return true;  
                                }else{  
                                    return false;  
                                }                 
                        }else{  
                            return false;  
                        }  
                }             
            }  
        }  
  • 相关阅读:
    PHP-Manual的学习----【语言参考】----【基本语法】
    PHP-Manual的学习----【安装与配置】
    Python HTML解析模块HTMLParser(爬虫工具)
    Apache 配置方法(虚拟目录、域名、虚拟主机等)
    Apache httpd.conf配置文件主要内容解释
    Apache Windows下Apache安装步骤
    Apache Linux下Apache安装步骤
    【LOJ】#2055. 「TJOI / HEOI2016」排序
    【LOJ】#2054. 「TJOI / HEOI2016」树
    【LOJ】#2052. 「HNOI2016」矿区
  • 原文地址:https://www.cnblogs.com/CherishFX/p/4607084.html
Copyright © 2011-2022 走看看