this table of Java operator precedence and associativityによれば、メンバアクセスはnew
オペレータより優先されます。クラスmyClass
と非静的メンバ関数myFunction
与えしかし括弧なしでJavaの新しいオブジェクトのメソッドを呼び出す:操作違反の順序?
、次のコード行は有効です:new
前に評価され
new myClass().myFunction();
.
場合、どのようにこの行を実行することができますか?言い換えれば、カッコが不要なのはなぜですか?
(new myClass()).myFunction();
私の推測では、.
と()
株式優先するので、myClass()
が最初に評価され、そのため、コンパイラはゼロでさえパラメータを持つmyClass
コンストラクタが呼び出されているnew
キーワードを評価する前に知っていることです。しかし、これはまだ最初の行がnew (myClass().myFunction());
と一致するはずであることを暗示しているようです。ではなく、です。
この表は標準的な参照ではありません。証拠として引用することはできません。 – EJP
@EJPまあ、それは完璧ではないことが分かっていますが、それは十分に信頼できると思われました。他の優先順位表は同じことを示しているか、まったく「除外」されているようです。 –
あなたはそれを両方向にすることはできません。それは完璧で100%信用できるか、それを証拠として引用することはできません。それが規範的でないという事実は、それが100%信頼できるものではないことを意味します* ipso facto。* Java Tutorialの事実を含む他の優先順位テーブルにも同じことが適用されます。唯一の標準的なリファレンスは[Java言語仕様、第18章](http://docs.oracle.com/javase/specs/jls/se7/html/jls-18.html)です。 – EJP