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方法

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

  • 相关阅读:
    易语言VS杀毒软件:基情复燃,转受为攻!
    android xml解析
    Activity中与ListActivity中使用listview区别
    Android四大基本组件介绍与生命周期
    eclipse_中的注释_快捷键
    ADB server didn't ACK
    JDK安装配置
    Android开发把项目打包成apk
    分享Kali Linux 2016.2第48周镜像文件
    iOS10 UI教程视图调试
  • 原文地址:https://www.cnblogs.com/qianyoo/p/10248199.html
Copyright © 2011-2022 走看看