“a <= b && b <= a && a!= b”如何可以为真?

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

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

代码:

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

我感谢你花时间。

这对于原始types是不可能的。 你可以用盒装整数实现它:

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

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

这也起作用:

 Integer a = 128, b = 128; 

这不:

 Integer a = 127, b = 127; 

int Integer.valueOf(int)的调用,自动装箱int是语法糖。 这个函数使用caching的值小于128.因此,128的分配没有caching命中; 它会为每个自动装箱操作创build一个新的Integer实例,并且a != b (引用比较)为true。

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

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