23

数年前にこのインタビューの質問がありましたが、まだ答えが見つかりません.

無限ループを作るには x と y は何ですか?

while (x <= y&& x >= y && x != y) {

}

、、で試しましNaninfinity+/-null

floatint

4

4 に答える 4

37

比較可能で、同じ値を持つが異なるインスタンスを表す 2 つの変数が必要です。次に例を示します。

Integer x = new Integer(0);
Integer y = new Integer(0);

x <= yy <= xはボックス化されていないため両方とも true ですがInteger、インスタンスの等価性x == yは false です。

FloatLongおよびDoubleあまりにも機能し、任意の値 (0 だけでなく) が機能することに注意してください。


JVM の複雑さをいじることもできます。一般に、127 までの整数のみをキャッシュするため、これも機能します。

Integer x = 128;
Integer y = 128;

(しかし、127ではそうではありません)。

またはもっと簡単に言えば、Doubles は通常まったくキャッシュされないためです。

Double x = 0d;
Double y = 0d;
于 2013-04-12T11:52:50.383 に答える
5

たとえば、次のように 2 つの整数オブジェクトを作成する必要があります。

Integer x = new Integer(2);
Integer y = new Integer(2);

xyはオブジェクトで序数型ではないため、無限ループが発生します。

于 2013-04-12T11:53:58.460 に答える
2

あなたはあなたの答えを持っています。私はどうやって同じ答えにたどり着いたかを言いたかっただけです。通常の世界では、そのようなテストは役に立たないでしょう。2 つの数がそのように機能する方法はありません。つまり、Java固有のものでなければなりません。

x と y はいずれかの単純な型である可能性があります - これはすぐには不可能です。

x と y はオブジェクトである可能性があります。しかし、<= または >= と比較されるオブジェクトは何ですか? 「箱入り」の数字のみ。したがって、答えは本当にすぐに出てきます。

于 2013-04-12T12:10:05.580 に答える
0

ここにあります。

Integer x =1;
Integer y = new Integer(1);
while(x <= y&& x >= y && x != y) {
    System.out.println("Success");
}
于 2013-04-12T11:55:32.673 に答える