4

我正在审查一些代码,我遇到了这个:

 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 为 null 时它是如何工作的,或者至少我认为我知道,因为三元组有 myString, null,但我不太清楚为什么当 myString 不为 null 时它会去那里?

4

6 回答 6

5

括号来救命!

doSomething(myString = ( ( myString != null ) ? myString.toLowerCase() : myString ), null)

要理解这一点,你需要知道两件事:

  • 三元运算符的工作原理
  • 赋值运算符返回它正在分配的东西的事实
于 2011-06-28T18:14:42.130 回答
3

doSomething接收两个参数,都是字符串。在doAnotherThing

  • 传递给的第一个参数doSomething是:
    • null如果myStringnull,
    • myString.toLowerCase()除此以外。
  • 传递给的第二个参数doSomething总是null.

像这样重写可能会更清楚:

public static doAnotherThing(String myString)
{
    if (myString == null) return doSomething(null, null);
    else return doSomething(myString.toLowerCase(), null);
}
于 2011-06-28T18:12:21.907 回答
3

它只是一个更复杂的版本:

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) 
}
于 2011-06-28T18:13:44.227 回答
1
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);

您还应该注意,字符串是不可变的,在 doAnotherThing(String) 中更改 myString 的值不会影响传递给方法的字符串。

于 2011-06-28T18:13:29.390 回答
1

代码令人困惑,但我不确定问题出在哪里。赋值的结果是赋值。

 return doSomething(myString = myString != null ? myString.toLowerCase(): myString, null)

是相同的

 if(myString != null) myString = myString.toLowerCase();
 return doSomething(myString, null)
于 2011-06-28T18:15:16.513 回答
0

从三元运算符赋值给变量,如下所示:

minVal = (a < b) ? a : b;

更多示例: http ://alvinalexander.com/java/edu/pj/pj010018

于 2016-03-15T11:09:09.033 回答