“a <= b && b <= a &a != b”怎么可能是真的?

2022-08-31 19:44:38

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

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

代码:

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

感谢您抽出宝贵时间。


答案 1

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

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

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


答案 2

这也有效:

Integer a = 128, b = 128;

这不会:

Integer a = 127, b = 127;

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

分配 127 具有缓存命中数,并且生成的对象实际上是缓存中的同一实例。因此,参考比较是错误的。Integera != b


推荐