-2

これが私の while ループです。問題は、どうすれば真の条件を取得できるかということです。

sそして変数tですInteger

while (s<=t && s>=t && s!=t )

編集

tl;dr元の質問は次のように述べています:

sそして変数です(そしてOPは変数ではないとコメントしましtintInteger

4

6 に答える 6

3

一度もない! stint変数であるためs == t、3 番目のオペランドが失敗するs != tと、最初の 2 つのオペランドのいずれかが失敗します。

volatile int s, t;マルチスレッド アプリケーションのように宣言されている場合は可能ですが、ほとんどありません。

編集

質問が変更されました。stは整数変数になり、Integerオブジェクトを参照する回答がより適切になります。

于 2012-12-10T18:25:21.487 に答える
2

オブジェクトのプリミティブ値をボックス化することにより:

    Integer s = new Integer(5);
    Integer t = new Integer(5);

    boolean rslt = (s <= t && s >= t && s !=  t);

    System.out.println("Result = " + rslt);

ここのrsltブール値は実際に に評価されtrueます。

ただし、次の場合は false が返されます。

s <= t && s >= t && !s.equals(t)

Java では、オブジェクトの場合、==は実際には同じインスタンスであることを意味しますが、 はequalsすべてのクラスによって実装されるまで残され、通常は、比較されるオブジェクトのコア値が同じであることを意味しますが、必ずしも同じであるとは限りません。クラスインスタンス (別名オブジェクト)。ボックス化されたプリミティブの> and <for は、プリミティブ値に対して評価されます==が、オブジェクトの同一性をチェックしています。

于 2012-12-10T18:31:45.647 に答える
1

それは実際に可能です:

public class EqualsTest
{
    public static void main(String[] args)
    {
        Integer x = new Integer(Integer.parseInt(args[0]));
        Integer y = new Integer(Integer.parseInt(args[1]));

        if(x <= y && y <= x && y !=x)
        {
            System.out.println("equal");
        }
        else
        {
            System.out.println("not equal");
        }
    }
}

これをコンパイルし、2つの等しい整数の引数を使用して実行すると、次のようになります。

$ java EqualsTest 5 5
equal

これが機能する理由は、オートボクシングと、オブジェクト==の場合、参照が同じであるかどうか(上記の場合はそうではない)のみをチェックするという事実によるものです。

于 2012-12-10T18:35:52.760 に答える
0

最初の 2 つの条件が真になる唯一の方法は、s が t に等しく、3 番目の条件がこの事実を否定する場合です。

したがって、私はその可能性があるとは思わない

于 2012-12-10T18:28:50.787 に答える
0

2 つの値が複数のスレッド ( static、または複数のスレッド間で共有されるオブジェクトのメンバー変数) からアクセスできる場合は、次のようにすることができます。

スレッド 1:

s = 1; // 1
t = 1; // 2
t = 2; // 5

スレッド 2:

これは式と同等ですが、ラベル付けが簡単です。

boolean result = s <= t; // 3
if(result) {
    result = s >= t; // 4
}
if(result) {
    result = s != t; // 6
}

すべてがコメントされた番号で指定された順序で行われると仮定すると、スレッド 2 のコードの最後でresulttrue になります。

したがって、スレッド 1 が と が等しいことを設定st、次にスレッド 2 がそれらが等しいことを確認し、次にスレッド 1 がそれ​​らが等しくないことを設定し、次にスレッド 2 がそれらが等しくないことを確認します。

これが真である可能性があるより複雑な状況がありますが、これは私が考えることができる最も単純な状況です.

于 2012-12-10T18:40:31.153 に答える
0

決して男ではありません。

s<=t && s>=t は、s == t の場合に true を返し、s == t && s != t は、常に false を返します。

于 2012-12-10T18:26:37.130 に答える