Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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中三个同时表达式的求值_Java - Fatal编程技术网

这';如果';Java中三个同时表达式的求值

这';如果';Java中三个同时表达式的求值,java,Java,我在Java测试中遇到了这个问题,我必须给a和b赋值,所以这个表达式的计算结果为true: (a<=b && b<=a && a!=b) (这里有一个简单的技巧 你不能仅仅用布尔逻辑来思考这个问题。用它,这个组合 a小于或等于b,并且 b小于或等于a,并且 a不等于b …将永远不会返回true 但是,如果操作数是对象,则!=运算符会比较引用 因此,以下内容将返回true: Integer a = 1; Integer b = new Intege

我在Java测试中遇到了这个问题,我必须给
a
b
赋值,所以这个表达式的计算结果为true:

(a<=b && b<=a && a!=b)

(这里有一个简单的技巧

你不能仅仅用布尔逻辑来思考这个问题。用它,这个组合

  • a
    小于或等于
    b
    ,并且
  • b
    小于或等于
    a
    ,并且
  • a
    不等于
    b
…将永远不会返回
true

但是,如果操作数是对象,则
!=
运算符会比较引用

因此,以下内容将返回
true

Integer a = 1;
Integer b = new Integer(1);
System.out.println(a<=b && b<=a && a!=b);
整数a=1;
整数b=新的整数(1);

System.out.println(a
a
b
的类型是什么?
a
和“b”可以是任何数字包装,只要它们相同。
Byte
Character
Integer
long
Float
Double
作为
!=
比较引用,但是
如果你喜欢这个难题,试试
x!=x+0
有三种可能的类型,
x==-x
有22种可能的值/类型。最后一种只有三种?您可能认为
float
double
等于NaN将使用断开的IEEE-754等式,而字符串将在其自身和末尾为“0”的新字符串之间进行引用比较。不过,任何包装类型的非空值都会起作用吗?这是一个多么可怕的测试问题。希望这是一个高级主题。@OldCurmudgeon-他使用的是
新整数(1);
它不会从本地缓存返回值(不像
Integer.valueOf()
)。所以我想这很好:)@OldCurmudgeon正要回答,但ThwLostMind打败了我。显式初始化一个
新整数(int值)
玷污了实习。我试图在JLS中找到一段可以保证这一点的文章,但我没有任何运气……也无法确定它是否有效。有人有引用吗?@JörgWMittag看到:对于
=
“…操作数…必须…转换为原始数字类型”,对于
=
@Mena,“…如果两者都引用同一对象,则==的结果为真”这些知识是必要的,但不足以回答此问题,特别是考虑到它取决于通常不受欢迎的行为(使用
!=
比较引用)。如果我向某人展示答案并让他们发现错误,我非常希望他们能找到它;但反过来说,呈现看似错误的行为并让某人创建触发错误的错误代码……这对我来说似乎没那么有用。我猜是YMMV.)