• String类型中 "=="和"equals"比较的差别


    String类型中 "=="和"equals"比较的差别

    • 先说明一下String类型的变量的创建方式

      在创建新的String类型的变量时,首先会在缓冲区查找是否有这个产量对应的对象,有就直接将找到的对象的地址赋给新创建的变量,没有就重新创建一个对象,然后赋给新创建的变量

    String str = "str";//创建一个新的String类型的变量,在已有的缓冲区中没有就重新创建一个
    String str1 = "str";//创建时在缓冲区发现有和即将创建的值一样的对象,就将str的地址赋给str1
    str == str1;//true
    String str2 = new String("str");//强制创建一个对象str2,地址和str,str1不同
    str2 == str;//false因为==比较的是对象的地址,而二者地址不同,故为false
    str2 == str1;//false同上
     
    str2.equals(str1);//true  String继承Object方法中的equals方法进行重写,内部比较是两个String类型的字符串一个一个字符的比较(下边是源码)
    str2.eauals(str);//true同上
     
     
    
    public boolean equals(Object anObject) {//String类中equals源码
            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;
        }
    
    • 其他类型 "=="和"equals"的比较

      所有的类都继承了Object类,Object类中有一个equals方法,源码如下

      public boolean equals(Object obj) {
              return (this == obj);
          }
      

      "=="比较的就是引用对象的地址是否相等,而不是比较值,比较值的话就需要重写equals方法

      对于基本数据类型只能用"==",比较的是两个基本类型的值

  • 相关阅读:
    存储结构接收数组
    oracle数据库sql根据查看执行计划优化sql--走不走索引
    多线程--Thread
    java常用集合族谱
    设计模式之二 适配模式
    Tomcat优化问题
    设计模式之一
    C++虚函数表,虚表指针,内存分布
    设计模式
    linux环境下的时间编程
  • 原文地址:https://www.cnblogs.com/awayfly/p/10248199.html
Copyright © 2020-2023  润新知