这项测试会有效吗?:
if (testInt/2).ofType(Integer){
//to-do if even
}
我认为如果编译器在testInt/2
之前解析ofType()
,是这样的吗?
答案 0 :(得分:4)
最好的方法是使用模数运算符。
if (testInt % 2 == 0)
{
//Do stuff
}
//3 % 2 = 1 , therefore odd
//4 % 2 = 0 , therefore even
模数只是从除法中得到余数。
答案 1 :(得分:2)
使用模数运算符有效,但有更好的方法可以检查。所有偶数的最低有效位为0,赔率为1。使用1执行按位AND操作将清除除LSB之外的所有操作。检查该位以确定整数的奇偶校验。使用较少的内存来清除位而不是计算余数。
if ((testInt & 1) == 0) //Even Number
if ((testInt & 1) == 1) //Odd Number
/*
4 & 1 = 0
5 & 1 = 1
1342424 & 1 = 0
5987833 & 1 = 1
*/
答案 2 :(得分:0)
此测试是否有效?
没有。表达式执行整数除法(因为两个操作数都是整数),并且表达式的结果始终具有类型int
。例如,
1 / 2 => 0 // not 0.5
2 / 2 => 1
-3 / 2 => -2 // not -1.5 or -1 ...
// integer division rounds towards minus infinity
我认为如果编译器在ofType()之前解析testInt / 2;是这样的吗?
编译器在编译时解析静态类型testInt/2
,同时在运行时执行instanceof
测试。
但是,您的假设不正确,因为它基于不正确的理解表达式和键入。
表达式的编译时类型不依赖于操作数的值。它只取决于操作数的编译时类型。
对于基本类型,没有多态性,因此运行时类型和编译时类型相同。
正如@Cameron C所述,进行测试的正确方法是使用模数运算符%
。
@ styro的方法有效,但是:
答案 3 :(得分:0)
试试这段代码......
public static boolean isEven (int testInt) {
int i=0;
while (i <= testInt) {
if (i==testInt) return true;
i+=2;
}
return false;
}