我刚才有一个我无法回答的问题.
假设您在Java中使用此循环定义:
while (i == i) ;
Run Code Online (Sandbox Code Playgroud)
如果循环不是无限循环并且程序只使用一个线程i,i那么类型和值是什么?
我在网上表格上收到了这个测验,以申请我所在城市最近的Java活动:
//Instead of this comment what code should be written so you can get "Gotcha!" printed
if( a == a ){
System.out.println("Not yet...");
} else {
System.out.println("Gotcha!");
}
Run Code Online (Sandbox Code Playgroud)
AFAIK:==Java中对象的比较检查两个对象在内存中是否相同,并且覆盖该equals方法不会覆盖==运算符,如C++和其他允许运算符重载的语言
我试图a用Java中的以下功能来改变价值,但没有一个能让我得到我想要的东西:
我该怎么做才能使a对象与自身不同?
我正在查看 的源代码中的一些内容java.lang.Math,我注意到 while Math.min(int, int)(或其长版本)是这样实现的:
public static int min(int a, int b) {
return a <= b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说完全有意义,这和我要做的一样。但是,双/浮点实现是这样的:
public static float min(float a, float b) {
if (a != a) {
return a;
} else if (a == 0.0F && b == 0.0F && (long)Float.floatToRawIntBits(b) == negativeZeroFloatBits) {
return b;
} else {
return a <= b ? a : b;
}
}
Run Code Online (Sandbox Code Playgroud)
我完全傻眼了。相比a于自己?第二次检查是为了什么?为什么它的实现方式与 int/long 版本不同?
最近我接受了一家软件公司的采访,在技术能力回合中询问了以下问题:
以这样的方式声明我,条件总是为真:
while(i != i) {
}
Run Code Online (Sandbox Code Playgroud)
在Java中技术上是否可以分配这种东西?
java.lang.Math #min(double,double):
public static double min(double a, double b) {
if (a != a) return a; // a is NaN
if (a == 0.0d && b == 0.0d && Double.doubleToLongBits(b) == negativeZeroDoubleBits) return b;
return (a <= b) ? a : b;
}
Run Code Online (Sandbox Code Playgroud)
在哪种情况下可以a != a返回true?似乎a是NaN 的时候,但我无法想象一个例子.你能提供一个吗?