我正在做论文考试
public static void triangleTest( int a, int b, int c)
{
if ( a > 0 & b > 0 & c > 0 )
{
if ( a==b || b==c );
{
System.out.println("Equilateral");
}
else if ( a==b || a==c || b!=c )
System.out.println("Scalene");
}
else if ( a+b>c && a+c>b || b+c>a );
{
System.out.println(Isoceles);
}
}
else
{
System.out.println("");
}
}
我已经获得了这个代码并被告知要发现错误,当我检查答案时
if ( a > 0 & b > 0 & c > 0 )
这已被识别为错误并且&&
意味着用来代替&
我运行代码并且它与&
一起使用,所以我的问题是什么是什么这背后的推理?
答案 0 :(得分:0)
&
是bitwise operator
而&&
是logical and operator
。
短路原理不适用于按位和运算符,即&
。
&安培; < - 验证两个操作数
&安培;&安培; < - 停止评估第一个操作数是否计算为false,因为结果将为false
答案 1 :(得分:0)
& 评估两个值
如果&& 检查第一个是否为假,则将结果设置为false。
答案 2 :(得分:0)
如果您使用&
,它会检查第二个条件,但首先是false
。
在&&
时,如果首先是false
,则不会检查下一个条件。
在某些情况下,它可能会导致异常。 例如:
// Some Code
if ( a != null & a.length() > 0 ){
//coding part
}
如果NullPointerException
为&
,上面的代码会将a
与null
一起投放。因为它会在每次首先true
或false
时检查第二个条件。
所以它会像这样......
// Some Code
if ( a !=null && a.length() > 0 ){
//coding part
}
更多信息:refer this SO Que
答案 3 :(得分:0)
&安培;&安培;是logical and
,它是短路的。 &安培;是bitwise and
。虽然对于其他情况,它是非常不同的;对于布尔((实际)差异只是它不会短路。
短路意味着它会跳过评估不会影响结果的条件。例如
if(cheapTest() && expensiveTest() && expensiveTest2())
如果第一次测试是假的,那么表达必须是假的,所以它不会为昂贵的测试而烦恼。
if(FALSE && DONTCARE && DONTCARE)
对于|,反之亦然vs ||。
如果第二次测试可能会在评估时引发异常,这可能更为重要,例如
if (someObject!=null && someObject.someTest())
在这种情况下,如果someObject
为null,则someObject.someTest()
永远不会运行,这是预期空值时的常见模式。使用bitwise and
的地方,在所有情况下都会运行两个测试,如果someObject
为空,则会收到NullPointerException