Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “怎么可能?”;a<;=百安居酒店&;b<;=a&&;a!=b";是真的吗?_Java_Loops_If Statement_Autoboxing - Fatal编程技术网

Java “怎么可能?”;a<;=百安居酒店&;b<;=a&&;a!=b";是真的吗?

Java “怎么可能?”;a<;=百安居酒店&;b<;=a&&;a!=b";是真的吗?,java,loops,if-statement,autoboxing,Java,Loops,If Statement,Autoboxing,这是代码,我必须弄清楚这是怎么可能的。我有一个线索,但我不知道怎么做。我认为这是关于负数和正数,也许还有变量修饰符。我是一个初学者,我到处寻找解决方案,但我找不到任何有用的 问题是:您需要声明并初始化这两个变量。if条件必须为true 守则: if( a <= b && b <= a && a!=b){ System.out.println("anything..."); } if(a这对于基元类型是不可能的。您可以使用装箱整数来实现:

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

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

守则:

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

if(a这对于基元类型是不可能的。您可以使用装箱整数来实现:

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)
的语法糖。此函数对小于128的值使用缓存。因此,128的赋值没有缓存命中;它会在每个自动装箱操作中创建一个新的
Integer
实例,
a!=b
(参考比较)为真


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

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

Java 5上附加的新功能中的这些微妙之处太可怕了……多么有可能出现bug。@Thilo有一个理由将它们称为微妙之处。我不认为上述微妙之处有任何问题。@Thilo同意,只有当您确切知道自己在做什么时,自动装箱和取消装箱才方便。这不起作用由于内部的
IntegerCache
。初始化为128,您将是正确的。这个答案是正确的;他没有使用自动装箱。当然,
new
操作符保证创建一个新对象(或者无法正常返回)。对于
int
,我不认为
if
的计算结果是
true
如果存在浮点数的组合,我不会感到惊讶。我研究了-0F和0F,但它们不会这样做。我认为亨利的答案是正确的。@JoachimSauer@johnchen902您链接的问题已经是重复的了。我不喜欢将问题链接为重复问题的副本。顺便说一句:这种问题没有任何效果。这个问题(“如何使(a=b&&a!=b)为真?”)应该被否决,但我们每周都会在“热门问题”中得到这个问题tab.应该注意的是,规范中没有指定缓存内容的确切边界。@joachimsuer根据规范,必须缓存间隔[-128,127],因此,例如127将始终失败。超过该间隔的值可能会被缓存,这将导致失败。