Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 如何声明i和j使其成为无限循环? while(i=j&&i!=j){}_Java_Infinite Loop - Fatal编程技术网

Java 如何声明i和j使其成为无限循环? while(i=j&&i!=j){}

Java 如何声明i和j使其成为无限循环? while(i=j&&i!=j){},java,infinite-loop,Java,Infinite Loop,如何声明i和j使其成为无限循环 //这是我遇到的面试问题 它在问i和j的声明是什么,让它永远是真的 我不能把I和j声明为数字类型。还有什么其他类型可以满足它?Integer i=新整数(1000); while( i <= j && i >= j && i != j) {} 整数j=新整数(1000); System.out.println((i=j)+++(i!=j)); i和j将自动取消绑定到=的ints,但不适用于=i和j是不同的实例,但具有

如何声明i和j使其成为无限循环

//这是我遇到的面试问题

它在问i和j的声明是什么,让它永远是真的

我不能把I和j声明为数字类型。还有什么其他类型可以满足它?

Integer i=新整数(1000);
while( i <= j && i >= j && i != j) {}
整数j=新整数(1000); System.out.println((i=j)+++(i!=j));

i
j
将自动取消绑定到
=
的ints,但不适用于
=
i
j
是不同的实例,但具有相同的int值。这就是为什么这三个比较结果都是正确的

对于给定的语句,“i”和“j”的任何相等值都将显示为true,例如:

Integer i=new Integer(1000);
Integer j=new Integer(1000);

System.out.println((i<=j)+" "+(i>=j)+" "+(i!=j));
整数i=新整数(1);
整数j=新整数(1);
而(i=j&&i!=j){}
魔术是用运算符!如果是!=运算符编译器将操作数作为对象(包括它们的值),而在>=或的情况下(“在我的机器上”):

然而,这是行不通的:

Integer a = 128, b = 128;
自动装箱
int
是调用
Integer.valueOf(int)
的语法糖。此函数对-128到127(含)之间的值使用缓存。它可能会缓存其他值,但在我的情况下,它不会

因此,128的分配没有缓存命中;它使用每个自动装箱操作创建一个新的
Integer
实例,并使用参考比较
a!=b
是正确的。127的赋值有一个缓存命中,得到的
Integer
对象实际上是缓存中的同一个实例。因此,参考比较
a!=b
为假


我真正想指出的是,要小心与自动装箱的引用比较。一个更可能的现实问题是,您期望
A==b
为真,因为它们被分配了相同的(自动装箱)值,您运行一些单元测试来确认您的期望,然后当某个计数器超过缓存的上限时,您的代码“在野外”失败。快乐时光

@DJClayworth你所说的“
|
版本”是什么意思?@Alan,很好的问题+1很好,我认为这是正确的答案。至少这是真的//这是一个多么棘手的面试问题+1
i=j&&i!=j
+1以获得准确的答案,但为什么i和j不能为i解绑=J我不是=j应该检查i和j的值吗?还有哪些其他语言也是如此?@SpeedBirdNine不可能做到
i=否则为空。有时候你想比较实例而不是值。问得好,回答得好+一个伟大的补充!
Integer a = 128, b = 128;
Integer a = 127, b = 127;