zoukankan      html  css  js  c++  java
  • 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方法

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

  • 相关阅读:
    element ui 表单清空
    element ui 覆盖样式 方法
    element ui 修改表单值 提交无效
    element ui 抽屉里的表单输入框无法修改值
    element ui 抽屉首次显示 闪烁
    css 左侧高度 跟随右侧内容高度 自适应
    PICNUF框架
    elementui 抽屉组件标题 出现黑色边框
    vue 子组件跨多层调用父组件中方法
    vue 编辑table 数据 未点击提交,table里的数据就发生了改变(深拷贝处理)
  • 原文地址:https://www.cnblogs.com/qianyoo/p/10248199.html
Copyright © 2011-2022 走看看