2017-02-23 7 views
2
public void printManagerAvailable(Manager mgr) { 
    System.out.println(" Is Manager object available : " + mgr!=null); 
} 

出力チェック:出力はここだけtrueなぜ印刷対象とヌル

true 

を?私は期待してい:

Is Manager object available : true 
+0

私はドン」にtを印刷したい。私はちょうどマネージャーがヌルかログで利用可能かどうかを知りたい。私はString.valueOf(mgr)を使用して、期待される出力を得ました。 msgstr "マネージャオブジェクトは使用可能か:true"。私は "System.out.println(" Managerオブジェクトが利用可能かどうか "+ mgr!= null);"を印刷するだけで、なぜ私はブール値を取得するのか理解したい。 –

答えて

5

を、それはあなたが" Is Manager object available : " + mgrを言っていることはすべて!= nullの左にあると思っているので。つまり、最初に" Is Manager object available : " + mgrを実行してから、" Is Manager object available : [Object:Manager]" != nullを比較します。

これを行う。

Manager mgr = new Manager(); 
    mgr.setChangeClass(5); 
    mgr.setChangeClockIn(10); 
    System.out.println(" Is Manager object available : " + (mgr!=null)); 
+0

@Venkata Pavanそれ以来作られていますか? – MakPo

+0

本当に助けてくれてありがとう。 –

+0

文字列をブール値の結果と連結することを期待していますが、それは左から右に読み取るので、最初に目にするのはマネージャオブジェクト "+ mgr"です。そのため、文字列とManagerオブジェクトを新しい文字列に連結しようとします。次に、新しい文字列を取り出し、 'null 'でないことをチェックします。 'new_string!= null'の結果は' true'です。それが「真実」だけを返す理由です。 – MakPo

-1

このコード行を試してみてください。

System.out.println(" Is Manager object available : " + (mgr == null ? "is null" : "not null")); 
+1

彼は、マネージャオブジェクトが使用可能かどうかを判断するために、trueまたはfalseを返します。単に 'mgr!= null'をカッコで囲むだけで、そのトリックを行います。 – MakPo

1

その他の答えは何が起こっているかをカバーし、それが起こっている理由です:

Javaでoperator precedenceの順序は先に平等、!=の、追加、+を置きます。

ここでは、左から右への順序が原因ではないことに気づくことが重要です。

だから、そうのような順序での演算子を適用して持っているもの:

("Is null : " + mgr) != null 

そして、あなたが優先に、他の方法で強制的にブラケットを使用することができ、それを修正する:

"Is null : " + (mgr != null) 
+0

ありがとうございます。マネージャーが初期化されると、上記のfalseを返すことは決してありません。私はちょうど例としてそれを取った。 –

+0

@VenkataPavanさて、私はあなたの例を調整し、あなたの質問とは関係のない行を削除して、それが 'null 'になる可能性があるようにしました。 – weston

関連する問題