java中字符串相等判断

Wesley13
• 阅读 603

字符串的判断有2种:

        1、判断地址是否相等  用:==

        2、判断值是否相等  用:equals方法

Object类作为所有类的超类,而Object类的equals方法是直接比较地址的,源码如下:

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

所以,在String类中的equals方法,是重写了Object类的equals方法的,String类的equals方法源码如下:

public boolean equals(Object anObject){

    if(this==anObject){        //比较地址,如果地址相等,直接返回true

        return true;

    }

    if(anObject instanceof String){        //如果地址不相等,那就比较类型,如果类型不相等,直接返回false

        String anotherString =(String)anObject;    //由于是String类的比较,所以要把对象强转为String类

        int n=value.length;        //记录当前对象的字符长度

        if(n==anotherString.value.length){    //判断当前对象的字符串长度和传入的字符串长度是否一样,不一样,直接返回false,如果一样,接着往下比较

            char v1[]=value;    

            char v2[]=anotherString .value;

            int i=0;

            while(n-- !=0){        //将2个字符数组的循环对比

                if(v1[i] !=v2[i])    //将字符数组的字符进行对比

                    return false;    //如果出现一个字符不同,马上返回false

                i++

            }

            return true;

        }

    }
    

    return false;

}

String类的equals比较内容相同思路如下:

  1、先判断地址是否相等,相等返回true

  2、比较类型是否一样,不一样,返回false

  3、将传入的对象强转为String,比较长度,长度不相等,返回false

  4、长度相等,循环比较字符数组的元素,当有一元素比较内容不相同,马上返回false

  5、2个字符数组循环比较所有元素,没有内容不相同的元素,返回true

测试代码如下:

public class TestString {
    public static void main(String[] args) {
        String str="abc";
        String str2=new String("abc");   
        System.out.println("两个对象的内存地址是否相等:"+(str==str2));//false
        /**比较对应位置上的字符是否相等,如果所有的对象位置上的字符均相等,true,否则返回false*/
        System.out.println("两个对象的内容是否相等:"+(str.equals(str2)));
        
        
        //以下结果为 false  
        /**因为Person对象 instanceof String  的结果为false ,直接返回false*/
        System.out.println("String对象与Person对象的内容是否相等:"+(str.equals(new Person())));
    }
}
class Person{
    
}

水平有限,还请多多指教!

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
红烧土豆泥 红烧土豆泥
2年前
补充关于equals的比较方式
补充(equals比较)java.lang.String类中的方法equals判断相等依据策略:如果与目标相等返回0,小于目标返回值小于0,大于目标返回值大于0language@NativestaticfinalbyteLATIN10;@NativestaticfinalbyteUTF161;language/Compa
Wesley13 Wesley13
2年前
java采坑之路
判断相等字符串判断相等        String str1  null;        String str2  "java金融";       // str1.equals(str2);  错误的写法        str2.equals(str1); // 常量写前面        Objects.equ
Wesley13 Wesley13
2年前
java实现判断两个二叉树是否相同
1、定义树节点类:节点值、左节点、右节点、构造器2、先判断树是否为空的情况3、树不为空时,判断节点所指的值是否相等,若相等,则递归判断节点的左右节点是否相同,相同则返回true/\\ \Definitionforbinarytree \publicclassTreeNode{ \    intval
红烧土豆泥 红烧土豆泥
2年前
补充关于equals的比较方式
补充(equals比较)Object中的equals比较的是地址languagepublicbooleanequals(Objectobj)return(thisobj);java.lang.String类中equals的方法equals判断相等依据策略:如果与目标相等返回0,小于目标返回值小于0,大于目标返回值大于0lan
Wesley13 Wesley13
2年前
Java中==和equals的区别
""可以比较基本数据类型,也可以比较引用数据类型。如果比较基本数据类型比较的是变量中存储的值;如果比较引用类型比较的是变量中存储的地址引用。equals()是Object类中继承过来的方法,每个引用类型都可以调用,默认继承的equals()方法的比较与""一致。如下代码所示: publicbooleanequals(Objectobj)
Stella981 Stella981
2年前
Sonar 规则
bug类型:1、".equals()"shouldnotbeusedtotestthevaluesof"Atomic"classes.bug主要不要使用equals方法对AtomicXXX进行是否相等的判断Atomic变量永远只会和自身相等,Atomic变量没有覆写equals()方法.2、""
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
2年前
Java提高篇——equals()与hashCode()方法详解
阅读目录equals()方法详解hashcode()方法详解Hashset、Hashmap、Hashtable与hashcode()和Equals()的密切关系java.lang.Object类中有两个非常重要的方法:publicbooleanequals(Objectobj)pub
达里尔 达里尔
4个月前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数