2 lwy2381137 lwy2381137 于 2016.01.22 11:49 提问

java StringUtils.equal的源码问题

如果 a ="a", b = null, 请问StringUtils.equals(a, b)这个的结果是什么?下面是源码的逻辑, 哪位大神能分析一下么?
commons-lang-2.6.jar:
public static boolean equals(String str1, String str2)
{
return ((str1 == null) ? false : (str2 == null) ? true : str1.equals(str2));
}

5个回答

a510835147
a510835147   2016.01.22 11:59
已采纳

(str1 == null) ? false : (str2 == null) ? true : str1.equals(str2)

三元运算符啊 ,相当于
if(str1 == null){
return false;
}else{
if(str2 == null){
return true;
}else{
return str1.equals(str2);
}
}


lwy2381137
lwy2381137 我刚刚从官网下载了源码来看, 源码应该是 public static boolean equals(String str1, String str2) { return str1 == null ? str2 == null : str1.equals(str2); }, 应该是反编译有问题, 你的上面的思路应该是正确的, 谢谢!
接近 2 年之前 回复
a510835147
a510835147 回复粪怒的石头: 噢噢 那估计是 (((str1 == null) ? false : (str2 == null)) ? true : str1.equals(str2)); 这样的执行顺序
接近 2 年之前 回复
lwy2381137
lwy2381137 我上面贴出来的是commons-lang-2.6.jar反编译的源代码, 从源代码看来返回的应该是true, 可是当我去调StringUtils.equals("a", null)时返回的是false。。。
接近 2 年之前 回复
BobyApk
BobyApk   2016.01.22 12:06

True,str=null 返回true,你写的有问题啊

Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.22 12:23

你把源码拷贝出来,然后运行 一次

Evankaka
Evankaka   Ds   Rxr 2016.01.22 12:33

return ((str1 == null) ? false : (str2 == null) ? true : str1.equals(str2));
其实就是

((str1 == null) ? false : ((str2 == null) ? true : str1.equals(str2)))

enpterexpress
enpterexpress   2016.01.22 13:30

true

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!