zoukankan      html  css  js  c++  java
  • 【“==”与equals的区分】

    “==”和equals
     
     
    简单来说,“==”是关系运算符,而equals()是方法,不过他们的返回结果都是boolean(布尔类型)
     
    详细的说:
    1. “==” 可以比较值(两侧是基本类型),也可以比较地址,也就是比较两个对象在内存中的地址是否相同(两侧是引用类型),
    基本数据类型包括:boolean,char,short,int,long,float,double(注意string类型不是基本数据类型)
    引用类型:Map。。(引用类型就是除了基本数据类型之外的所有类型,也包括class类型)
    另外数据类型比较一般都是用 ==,不过String类型比较一般都是equals
     
    2.“equals”如果没有经过重写,只是引用object的equals方法,那么可以理解为equals和==是一样的功能——比较地址
    如果重写过,那就根据重写内容来比较
     
    如果举例来说:
      使用“==”  ,对于基本数据类型,就是比较变量的值是否相等,比如:int a = 6; int b = 3; a==b;返回就是false,这个大家都很熟悉
     如果是引用类型,就是比较地址   String a = new String(“abc”) ; String b = new String(“abc”);  这种情况下创建出来的”abc”对象会被存储到堆,
     a和b指向的“abc”分别存储到堆内存的不同位置。a和b里面保存的是”abc”在堆里面的内存首地址,这两个地址明显是不同的,所以我们在做 a==b操作的时候返回的为false
     
     
      使用“equals” ,如果类中没有重写过方法,那就是比较地址  
     
    如果不明白可以看看下面的实例:实践出真知啦
    public class equals {
    
        public static void main(String[] args) {
            StringBuffer a = new StringBuffer("aa");
            StringBuffer b = new StringBuffer("aa");
            System.out.println(a.equals(b));//false
            System.out.println(a==b);//false
    
            System.out.println("+++++分界线+++++");
    
            String s1 = new String("abc");
            String s2 = new String("abc");
    
            System.out.println(s1==s2);//false 两个变量的内存地址不一样,指向的对象不 一样,
            System.out.println( s1.equals(s2));//true    //两个变量的所包含的内容是abc,故相等。
    
    
    
        }
    }

    代码输出如下:

    false

    false
    +++++分界线+++++
    false
    true

    分析:

      前两个sout打印false是因为StringBuffer类中没有重写过equals方法,所以本质还是比较对象,而对象不同所以分配的内存地址也不一样的,所以是false

      后两个一个false,一个true,是因为String类重写了equals方法(感兴趣的可以去看看,idea中对着String左键单击就好),所以equals比较的是字符串内容,返回结果是true
  • 相关阅读:
    QTP问题:查询文件被占用
    QTP自动化
    Spring: $Proxy9 cannot be cast to test.spring.service.impl.PersonServiceImpl2
    spring: White spaces are required between publicId and systemId.
    spring学习1
    MyBatis学习(1)
    从技术人员的角度看,公司怎么生存?
    一天一工程总结系列-7.7-KVOController
    appCode使用说明
    ios开发中的字符串常量如何处理
  • 原文地址:https://www.cnblogs.com/dabuliu/p/14427774.html
Copyright © 2011-2022 走看看