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

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

  • 相关阅读:
    PMP笔记:行政收尾工作
    PMP 笔记:WBS 词典 (含范例)
    PMP 笔记:WBS 实战 (例子)
    名义小组和德尔菲技术使用与区别
    焦点小组、名义小组和引导式会议的定义与区别
    工作分解结构WBS、组织分解结构OBS、资源分解结构 定义和区别(含例子)
    kettle里的参数和变量
    kettle生成100个随机数,并统计小于等于50和大于50个数
    使用kettle制作拉链表
    MySQL字符串转日期
  • 原文地址:https://www.cnblogs.com/awayfly/p/10248199.html
Copyright © 2011-2022 走看看