数年前にこのインタビューの質問がありましたが、まだ答えが見つかりません.
無限ループを作るには x と y は何ですか?
while (x <= y&& x >= y && x != y) {
}
、、で試しましNan
たinfinity+/-
null
float
対int
。
数年前にこのインタビューの質問がありましたが、まだ答えが見つかりません.
無限ループを作るには x と y は何ですか?
while (x <= y&& x >= y && x != y) {
}
、、で試しましNan
たinfinity+/-
null
float
対int
。
比較可能で、同じ値を持つが異なるインスタンスを表す 2 つの変数が必要です。次に例を示します。
Integer x = new Integer(0);
Integer y = new Integer(0);
x <= y
とy <= x
はボックス化されていないため両方とも true ですがInteger
、インスタンスの等価性x == y
は false です。
Float
、Long
およびDouble
あまりにも機能し、任意の値 (0 だけでなく) が機能することに注意してください。
JVM の複雑さをいじることもできます。一般に、127 までの整数のみをキャッシュするため、これも機能します。
Integer x = 128;
Integer y = 128;
(しかし、127ではそうではありません)。
またはもっと簡単に言えば、Double
s は通常まったくキャッシュされないためです。
Double x = 0d;
Double y = 0d;
たとえば、次のように 2 つの整数オブジェクトを作成する必要があります。
Integer x = new Integer(2);
Integer y = new Integer(2);
x
とy
はオブジェクトで序数型ではないため、無限ループが発生します。
あなたはあなたの答えを持っています。私はどうやって同じ答えにたどり着いたかを言いたかっただけです。通常の世界では、そのようなテストは役に立たないでしょう。2 つの数がそのように機能する方法はありません。つまり、Java固有のものでなければなりません。
x と y はいずれかの単純な型である可能性があります - これはすぐには不可能です。
x と y はオブジェクトである可能性があります。しかし、<= または >= と比較されるオブジェクトは何ですか? 「箱入り」の数字のみ。したがって、答えは本当にすぐに出てきます。
ここにあります。
Integer x =1;
Integer y = new Integer(1);
while(x <= y&& x >= y && x != y) {
System.out.println("Success");
}