while(i != i) { } - 是否有可能有一个始终为真的赋值

最近,我接受了一家软件公司的面试,在技术能力倾向轮次中提出了以下问题:

以这样一种方式声明 i,即条件始终为真:

while(i != i) {
}

从技术上讲,在Java中可以分配这种东西吗?


答案 1

NaN不等于自身,所以

double i = Double.NaN;

但我不认为这是一个好的面试问题。

引用自 Java 语言规范:

NaN 是无序的,因此:

  • 数值比较运算符 、 、 和 返回,如果其中一个或两个操作数都是 (§15.20.1)。<<=>>=falseNaN
  • 如果任一操作数为 .,则返回相等运算符。特别是,如果 或 是 ,则为 。==falseNaN(x<y) == !(x>=y)falsexyNaN
  • 如果任一操作数为 (§15.21.1),则返回不等式运算符。特别是,是 且仅当 是 。!=trueNaNx!=xtruexNaN

答案 2