17

私はこの行動を見て驚いています。

バグか何かですか?

for(Object obj = new Object(), Integer = new Integer(300);
    obj.toString().length()>3;
    System.out.println("on object's loop")) {

} //causes an infinite loop (not foreach loop, of course)

上記のコードは、 への参照なしでコンパイルおよび実行されnew Integer(300)ます。なんでそうなの?

Integer = new Integer(300);参照なしで大丈夫な理由を知りたいだけです。

4

3 に答える 3

27
Object obj = new Object(), Integer = new Integer(300);

これにより、次の 2 つの変数が作成されます。

  1. objObjectに割り当てられるタイプのnew Object()
  2. Integer(はい、それは変数の名前です)またObject、に割り当てられるタイプnew Integer(300)です。

ところで、これはfor-loop とは何の関係もありません。その行はそれ自体で正常にコンパイルされます。もしそれ,が本当なら;話は別ですが。

一般に、次の形式の有効なステートメントを作成できます。

Type t1 = ..., t2 = ..., t3 = ..., ...;

これはと同等です

Type t1 = ...;
Type t2 = ...;
Type t3 = ...;
...
于 2013-07-11T20:26:58.163 に答える
15

彼はなぜ Integer = new Integer(300) が機能するのかを尋ねていると思います。– arshajii 2 分前

Integerは有効な識別子名であり、そのタイプObject

Object obj = new Object(), Integer = new Integer(300);

これはに相当します

int a=2, b=4;

obj.toString()String(クラス名とハッシュコードで構成される) を出力します。これは長さが 3 より大きいため、無限ループになります。

于 2013-07-11T20:23:24.250 に答える