“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的另一个罕见情况可能是另一个线程可能会在比较执行时更改a
和b
的值。