4

Scott Ambler が著書Java Coding Standardsで次のように述べていることに興味をそそられました。

2.5.2 比較の左側に定数を配置する

だから彼は使用することをお勧めします

if ( 1 == something ) {…}    
if ( 0 = x ) { …}

それ以外の

if ( something == 1 ) {…}    
if ( x = 0 ) { …}  

ああ、神様 !!!

そして、彼は次のように言って、これを動機付けています。

「両方とも同等ですが、少なくとも最初の検査では、左側のコードはコンパイルされ、右側のコードはコンパイルされません。」

私が知っているように (Java のプログラミングを開始したとき、Java 14 は既に使用されていました)、両方の条件でコンパイラ エラーがスローされます。

Ambler ステートメントから始めて、Java 構文if ( x = 0 );がコンパイル可能かどうかを検索しようとしました。

これで私を助けてもらえますか?JSRのさまざまなバージョンを検索しましたが、そのコードが他のJavaバージョンでコンパイルされていることを示す可能性のある変更は見つかりませんでした.

ターゲットとソース 1.2 を使用して Jre7 コンパイラでコンパイルしましたが、依然としてコンパイラ エラーが発生します。残念ながら、私は Java 1.1 コンパイラを持っていません: 9

私の質問は:

if(x = 0);古いバージョンの Java コンパイラでコンパイルできましたか?

4

2 に答える 2

5

コンパイルできません。if (x=true)ただし、x がブール値の場合も同様です。

于 2013-10-16T07:37:04.963 に答える
5

この条件if ( x = 0 ) { …} if ( 0 = x ) { …}は決してコンパイルされません。ifブール型を受け入れるがx=0、代入演算子であるためです。

0= x0=xは、決して不可能な 0 に x の値を格納していることを意味します。

この状態では有効なものであり、現在の整数との比較でうまく機能しますが、より適切に使用するif ( something == 1 ) {…} instead of if ( 1 == something ) {…}のではなく、文字列間の比較のためにとlink1 link2 の違いを知るには、このリンクを参照してください==.equals()==.eqauls()

于 2013-10-16T07:38:15.400 に答える