2017-08-25 3 views
-2

Java(@Android)三元演算子はどうして実際に動作するはずですか?Java(Android)上の三項演算子は、標準に従って動作するはずです。

チェックこれらの簡単な例:

boolean trigger = true; 
String myStr_NOK = trigger ? "YES:" : "NO:" 
       + " if trigger was TRUE" 
       + " this is NOT visible :-o"); 

String myStr_OK = (trigger ? "YES:" : "NO:") 
       + " if trigger was TRUE" 
       + " this is visible as should."); 

// I think the first comments missed this fact: 
trigger = false; 
String myStr_NOK = trigger ? "YES:" : "NO:" 
       + " if trigger was FALSE" 
       + " this IS concatenated AGAIN"); 

は、今では私の脳だけで飲み込むことを拒否していること、Javaロジックのmasterpeaceです。

Java(Android)の三項演算子を本当にかっこ内にカプセル化する必要がありますか?そうしないと、残りの合成文字列は得られませんか?

参照:三項演算子が角括弧内にないため、myStr_NOKには「YES:」のみが含まれていますか?

this pageには、角括弧が不要であることが明確に記載されています。私は正当に期待しています。 引用:

(注)この例では、カッコはオプションですが、...

EDITこと: 私は再フレーズ私のQをしてみましょう: は、標準では、三項演算子について何と言っていますか?私の見解は、三項演算子のまわりの括弧を用いて、式がFALSEの場合に限り、さらなる文字列連結が実行されるというものです。 TRUEの場合、連結されません。誰もがこの有意義で明白で期待される行動を見つけましたか?

そしてdownvotesだ今、私の元Q: 何を私が間違って取得していますか、世界はただ怒ってしまいましたの?

+1

のように書き出され

if(true) "YES"; else "NO" + theOtherStrings; 

世界が狂ったが、それは常にされていているのと同様です。あなたはその記事を誤解しています、それについて話している括弧はあなたが省略しようとしているものと同じではありません。なぜそれが動作しているのかを知りたい場合は、演算子優先順位ルールを調べます。 – Mat

+0

ヒント用のThanx。私は自分自身で正しい答えを見つけられなかったのではないかというと、憤慨するためにダウンボトムを取得しましたか? 私は既にQと尋ねる権利がないのか、それともJavaの標準について感情的になる権利がないのかを知るだけです... –

+0

なぜdownvoteがあるのか​​わからない。しかし、あなたの記事からフリルを削除すると、そのスタイルが気に入らない人のダウンフォースのリスクを軽減できます。シンプルで技術的に保つ。また、99.999%の時間は "Java(またはC++など)が壊れていますか?"質問は「いいえ、あなたは誤解している」と答える。したがって、その処方も避けてください。 – Mat

答えて

2

全く変なことはありません。

あなたの最初の例では、これが書き出さ基本的にある:あなたの第二の例は、この

String string; 
if(true) string = "YES"; 
else string = "NO"; 
string = string + theOtherStrings 
+0

私はあなたが何を意味するのか分からない。 –

+0

@Peter最初の例の3進演算子は、括弧を紛失します。つまり、最初の文字列は 'YES'で構成され、2番目の文字列は' NO +すべての他の文字列 'で構成されます。私の編集を参照してください。 –

+0

基本的に言っているのは、標準がそうであるということです。三項演算子のまわりに括弧がない場合、それは自己だけを越えて文字列を連結します。 (expressionがTRUEの場合、より高速な文字列の連結は大括弧でのみ機能します。) これはJava標準に準拠した動作ですか? 私が観察していることです。 –