首页 > 其他分享 >判断字符串相等

判断字符串相等

时间:2024-07-14 12:19:56浏览次数:16  
标签:相等 return String equals cs 判断 字符串 new ha

  • “==”操作符用于比较两个对象的地址是否相等。
  • .equals() 方法用于比较两个对象的内容是否相等。
String s1 = new String("hh");
String s2 = new String("hh");
// true
System.out.println(s1.equals(s2));
// false
System.out.println(s1 == s2);
  • Object类的equals()
// 假如子类没有重写该方法的话,那么“==”操作符和 .equals() 方法的功效就完全一样
public boolean equals(Object obj) {
    return (this == obj);
}
  • String类的equals()
public boolean equals(Object anObject) {
    // 检查是否是同一个对象的引用,如果是,直接返回 true
    if (this == anObject) {
        return true;
    }
    // 检查 anObject 是否是 String 类的实例
    if (anObject instanceof String) {
        // 将 anObject 强制转换为 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) {
                // 如果在任何位置字符不同,则返回 false
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            // 所有字符都相同,返回 true
            return true;
        }
    }
    // 如果 anObject 不是 String 类型或长度不等,则返回 false
    return false;
}
  • 举例
// true,equals() 比较的是两个字符串对象的内容是否相等
new String("ha").equals("ha");
// false,左侧的是在堆中创建的对象,右侧是在字符串常量池中的对象,尽管内容相同,但内存地址不同
new String("ha") == "ha";
// false,new 出来的对象肯定是完全不同的内存地址
new String("ha") == new String("ha");
// ture,字符串常量池中只会有一个相同内容的对象
"ha" == "ha";
// true,由于h和a都在字符串常量池,所以编译器在遇到‘+’操作符的时候将其自动优化为ha
"ha" == "h" + "a";
// true,new先在字符串常量池中创建对象,然后再在堆中创建对象
// 执行 intern() 方法的时候发现字符串常量池中已经有了ha这个对象,所以就直接返回字符串常量池中的对象引用了
new String("ha").intern() == "ha";
  • Objects.equals()
// 不需要在调用之前判空
public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}
  • String类的.contentEquals()
public boolean contentEquals(CharSequence cs) {
    // Argument is a StringBuffer, StringBuilder
    if (cs instanceof AbstractStringBuilder) {
        if (cs instanceof StringBuffer) {
            synchronized(cs) {
               return nonSyncContentEquals((AbstractStringBuilder)cs);
            }
        } else {
            return nonSyncContentEquals((AbstractStringBuilder)cs);
        }
    }
    // Argument is a String
    if (cs instanceof String) {
        return equals(cs);
    }
    // Argument is a generic CharSequence
    char v1[] = value;
    int n = v1.length;
    if (n != cs.length()) {
        return false;
    }
    for (int i = 0; i < n; i++) {
        if (v1[i] != cs.charAt(i)) {
            return false;
        }
    }
    return true;
}

标签:相等,return,String,equals,cs,判断,字符串,new,ha
From: https://www.cnblogs.com/sprinining/p/18301342

相关文章

  • 字符串拼接
    StringBuilder的append()Strings1="ha";Strings2="xi";//编译的时候被替换成newStringBuilder(s1).append(s2).toString();System.out.println(s1+s2);Strings1="ha";//+号也被编译成了append()Strings2=s1+"";System.ou......
  • 字符串常量池
    newString()创建了几个对象//使用new,每次都会创建一个新的对象Strings=newString("hh");先在位于堆中的字符串常量池中查找是否已经存在hh字符串对象如果有,直接在堆中创建一个hh字符串对象,然后把这个堆中新创建的对象地址返回给栈中的变量s如果没有,现在字符串常量池......
  • 字符串源码
    String类的声明//final不可被继承publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{}比较字符串内容publicbooleanequals(ObjectanObject){//检查是否是同一个对象的引用,如果是,直接返回trueif(this......
  • 【模板】字符串
    字符串哈希素数:13110612e6+931e7+192e7+933e7+231e9+97LL(1e16)+61Zfunctionn=strlen(s+1),m=strlen(t+1);z[1]=n;For(i,2,n,l=0,r=0){ if(i<=r)z[i]=min(z[i-l+1],r-i+1); while(s[z[i]+1]==s[i+z[i]])++z[i]; if(i+z[i]-1>......
  • 【06】闰年判断
    闰年判断题目描述输入一个年份,判断这一年是否是闰年,如果是输出111,否则输出00......
  • 24暑假算法刷题 | Day9 | LeetCode 151. 反转字符串中的单词,28. 找出字符串中第一个匹
    目录151.反转字符串中的单词题目描述题解28.找出字符串中第一个匹配项的下标题目描述题解459.重复的子字符串题目描述题解卡码网55.右旋字符串题目描述题解151.反转字符串中的单词点此跳转题目链接题目描述给你一个字符串s,请你反转字符串中单词的顺......
  • [Redis]字符串详解
    Redis中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在的。我们知道C语言里面的字符串标准形式是以NULL(即0x\0)作为结束符,但是在Redis里面,字符串不是这么表示的。因为要获取以NULL结尾的字符串的长度使用的是strlen标准库函数,这个函数的算法复杂度是0(n......
  • 中国股市如何判断支撑和压力
    今天我们来聊聊K线的支撑位与阻力位,这也是大家在做出决策前常用的技术分析手法,即“找到重要支撑与阻力”。 今天我教大家四种判断方法:均线指标支撑和压力、筹码、平台、缺口支撑压力,首先,大家在学技术判断股票支撑和压力前,先要懂股票支撑和压力的含义。  如图所示......
  • Js 前置,后置补零的原生方法与补字符串 padStart及padEnd
    在工作中,遇到了需要将不满八位的一个字符串进行后补0的操作,所以就在网上学习了关于js原生补充字符串的方法,然后用这篇博客记录下来。目录前置补充字符串 String.prototype.padStart()后置补充字符串String.prototype.padEnd()前置补充字符串 String.prototype.padStart......
  • Linux 中 grep命令仅仅输出匹配的字符串
     001、[root@PC1test]#lsa.txt[root@PC1test]#cata.txt##测试数据aa33aa77bbaaaa22aakkccbbddaauu883388rrqq[root@PC1test]#grep-oP"aa"a.txt##输出仅仅匹配的内容,但是换行了aaaaaaaaaaaa[root@PC1test]......