我正在审查一些代码,我遇到了这个:
public static doSomething(String myString, String myString2) {
//Stuff
}
public static doAnotherThing(String myString) {
return doSomething(myString = myString != null ? myString.toLowerCase(): myString, null)
}
这究竟是如何工作的?,我知道 .toLowerCase 生成的字符串被分配给 myString(是的,我知道不好的做法,因为您不应该重新分配方法参数,实际上它们应该是最终的(,但我不太确定该方法如何始终接收它需要的 2 个参数。
我知道当 myString 为空时它是如何工作的,或者至少我认为我知道,因为三元有 myString,null,但我不太确定为什么当 myString 不为空时它会在那里?
救援!
doSomething(myString = ( ( myString != null ) ? myString.toLowerCase() : myString ), null)
要理解这一点,您需要了解两件事:
- 三元运算符的工作原理
- 赋值运算符返回它正在分配的东西的事实
它只是一个更复杂的版本:
public static doAnotherThing(String myString)
{
myString = myString != null ? myString.toLowerCase(): myString;
return doSomething(myString, null)
}
甚至
public static doAnotherThing(String myString)
{
String s = myString;
if (myString != null)
s = myString.toLowerCase();
return doSomething(s, null)
}
doSomething
接收两个参数,这两个参数都是字符串。在doAnotherThing
:
- 传递给
doSomething
的第一个参数是:-
null
如果myString
null
, -
myString.toLowerCase()
否则。
-
- 传递给
doSomething
的第二个参数始终是null
。
像这样重写可能会更清晰:
public static doAnotherThing(String myString)
{
if (myString == null) return doSomething(null, null);
else return doSomething(myString.toLowerCase(), null);
}
myString = myString != null ? myString.toLowerCase(): myString
这段代码将 myString 重新分配为 myString.toLowerCase((,或者它不会重新分配它。 但是使用赋值运算符的行为返回已分配的值,因此您实质上调用的是:
//if myString != null
doSomething(myString.toLowerCase(), null);
//or if myString is null
doSomething(myString /*which is null*/, null);
您还应该注意,字符串是不可变的,并且在doOtherThing(String(中更改myString的值不会影响传递给该方法的字符串。
代码令人困惑,但我不确定问题是什么。 赋值的结果是分配的值。
这
return doSomething(myString = myString != null ? myString.toLowerCase(): myString, null)
与
if(myString != null) myString = myString.toLowerCase();
return doSomething(myString, null)
从三元运算符赋值到变量中,如下所示:
minVal = (a < b) ? a : b;
更多示例:http://alvinalexander.com/java/edu/pj/pj010018