“a< = b& b< = a&& a!= b”如何成为现实?

时间:2013-09-27 03:51:12

标签: java loops if-statement autoboxing

这是我必须弄清楚它是如何成为可能的代码。我有一个线索,但我不知道该怎么做。我认为它是负数和正数,也可能是变量修饰语。我是初学者,我到处寻找解决方案,但我找不到任何可用的东西。

问题是:您需要声明并初始化这两个变量。 if条件必须为真。

代码:

if( a <= b && b <= a && a!=b){
       System.out.println("anything...");
}

感谢您抽出宝贵时间。

3 个答案:

答案 0 :(得分:96)

原始类型无法实现。你可以用盒装整数实现它:

Integer a = new Integer(1);
Integer b = new Integer(1);

<=>=比较将使用未装箱的值1,而!=将比较参考,并且会成功,因为它们是不同的对象。

答案 1 :(得分:20)

这也有效:

Integer a = 128, b = 128;

这不是:

Integer a = 127, b = 127;

自动装箱int是致Integer.valueOf(int)的语法糖。此函数使用缓存小于128的值。因此,128的赋值没有缓存命中;它为每个自动装箱操作创建一个新的Integer实例,a != b(参考比较)为真。

127的赋值具有缓存命中,生成的Integer对象实际上是缓存中的相同实例。因此,参考比较a != b为假。

答案 2 :(得分:13)

类变量的另一种罕见情况可能是,在执行比较时,另一个线程可能会更改ab的值。