变量赋值 - Java 调用方法并使用三元运算符并在参数中赋值



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

 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

最新更新