需要解释过去的论文,&操作者

时间:2014-01-10 12:06:59

标签: java operators logical-operators

我正在做论文考试

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 ) 

这已被识别为错误并且&&意味着用来代替&我运行代码并且它与&一起使用,所以我的问题是什么是什么这背后的推理?

4 个答案:

答案 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&

上面的代码会将anull一起投放。因为它会在每次首先truefalse时检查第二个条件。

所以它会像这样......

// 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