53

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

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

编码:

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

感谢您抽出宝贵的时间。

4

3 回答 3

100

这对于原始类型是不可能的。您可以使用盒装整数来实现它:

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

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

于 2013-09-27T03:56:19.000 回答
20

这也有效:

Integer a = 128, b = 128;

这不会:

Integer a = 127, b = 127;

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

127 的赋值有一个缓存命中,结果Integer对象实际上是缓存中的同一个实例。因此,参考比较a != b是错误的。

于 2013-09-27T05:26:47.797 回答
13

类变量的另一个罕见情况可能是另一个线程可以在比较执行时更改a和的值。b

于 2013-09-27T06:00:00.010 回答