Java中的==和equal的用法

背景:

今天碰到一个问题如下,我传入一个json


Java中的==和equal的用法_第1张图片
image.png

然后通过后台解析,把数据解析出来,

   if ("1"==cxnr){
            Map accountInfoMap = xjService.queryAccountInfo(accoutIdList);
            resultMap.putAll(accountInfoMap);
        }

走到这里的时候打断点 进不去判断 当时很疑惑
后来仔细了解==和equal的用法 将问题解决

==和equal

java中有两种数据类型 基本数据类型和复合数据类型
基本类型包括:short int byte long char 等 基本数据类型可以直接比较
复合数据类型:当时用==比较的时候,比较的是他们的的内存地址
Object是所有类的基类,他其中有equal方法,也是比较的内存的地址
其中有一些类复写了equal方法 比如String Integer等

这里String的equal方法比较的是他们的具体值
String的equal的源码如下

   public boolean equals(Object anObject) {
        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;
    }

简单来说就是地址相同为真,地址不相同字符长度以及每一个都相同,也为真。

那么我上面的问题就解决了,应该吧 ("1"==cxnr) 变为 "1".equals(cxnr)
所以我们比较字符串的时候,要用equal的方法而不能用== 去比较字符串而不是去比较地址

你可能感兴趣的:(Java中的==和equal的用法)