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 の場合にどのように機能するかは知っていますが、少なくとも私はそう思うと思います。

4

6 に答える 6

5

救助への括弧!

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

これを理解するには、次の 2 つのことを知っておく必要があります。

  • 三項演算子のしくみ
  • 代入演算子が代入しているものを返すという事実
于 2011-06-28T18:14:42.130 に答える
3

doSomethingどちらも文字列である 2 つのパラメーターを受け取ります。でdoAnotherThing

  • に渡される最初のパラメーターdoSomethingは次のとおりです。
    • nullもしそうmyStringならnull
    • myString.toLowerCase()それ以外は。
  • に渡される 2 番目のパラメーターdoSomethingは alwaysnullです。

次のように書き直したほうがわかりやすいかもしれません。

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

コードは紛らわしいですが、何が問題なのかわかりません。割り当ての結果は、割り当てられた値です。

これ

 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 に答える
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 に答える
0

次のように三項演算子から変数に代入します。

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

その他の例: http://alvinalexander.com/java/edu/pj/pj010018

于 2016-03-15T11:09:09.033 に答える