String s = null 下列哪宗情况不会抛出NullPointException
A   if((s!=null)&(s.length>0))
B   if((s!=null)&&(s.length>0))
C   if((s==null)&(s.length==0))
D   if((s==null)&&(s.length==0))我选的是BD,可是回家在Eclipse上一试,发现只有A对,请问为什么?详细解答一下谢谢!

解决方案 »

  1.   

    答案是B,怎么会是A?&是按位与,无论左边表达式的值是什么,都要对右边表达式求值,所以A和C是肯定不对的。而&&是逻辑运算符,具有“短路”特性,即左边表达式如果是假,则直接得出假,不会再去对右边表达式求值。B是符合短路条件的,因为s!=null为假。而D则不符合短路条件,左边为真,右边表达式仍然要执行,因此也会抛出异常。顺便说一下,应该是s.length(),括号不能少。
      

  2.   

    楼主的题有问题,答案也有问题:
    s.length应该是s.length()另外,正确答案应该是 B
    只有B不会抛出NullPointException异常。主要考察的是&&和&的区别&& 是条件与。
    有条件地对第二个操作元计值:当第一个操作元是true(false)时,表达式的值就是true(false),此时不必对第二个操作元计值了。& 是布尔与。
    无论第一个操作元是true还是false,都要对第二个操作元计值。
      

  3.   

    写错了,
    A   if((s!=null)&(s.length>0))
    B   if((s!=null)&&(s.length>0))
    C   if((s==null)&(s.length()==0))
    D   if((s==null)&&(s.length()==0))
    这个是正确的,你们运行一下,D的确会抱错,但是B就不会!!!
    我运行了一下是B,我就是想问问D为什么不对。我没写清楚对不起大家
      

  4.   

    String s = null 下列哪宗情况不会抛出NullPointException
    A   if((s!=null)&(s.length>0))
    B   if((s!=null)&&(s.length>0))
    C   if((s==null)&(s.length()==0))
    D   if((s==null)&&(s.length()==0))这个是正确的问题!对不起大家拉,B和D的区别在那里呢?为什么b不抱错,d就抱错呢?
    希望回答的朋友都能亲自运行以下b和d,谢谢
      

  5.   

    Dan1980() 的回答已经很清楚了注意类似 (x && y) 这样的表达式是基于短路判断的:当x=false时,判断直接结束(无需再考虑后面的条件),整个表达式值为false,不会再去计算y(即使y会抛出异常)但当x=true时,还需要判断y的值,所以D是不对的
      

  6.   

    明显是B嘛大部分语言为了效率的原因, 采用所谓的"短路"计算方法, 也就是当左边的表达式计算结果可以代表整个表达式的结果时, 右边的表达式是不会进行计算的...比如
    if ((a != null) && (a.length() == 0))        当a为null时, a != null为false, 所以计算到此就终止了, 因为false与任何东西结果都必定是false同样类似的还有 || 运算了, 左边如果是true, 则计算就自动终止了, 最终结果也为true...
      

  7.   

    还是自己运行了下才知道是B
    String s=null;
    1.s==null-->true  s.length()-->NullPointerException
    2.&,&&一个短路与,一个逻辑与的问题还是不太明白s=null是什么含义
      

  8.   

    s.length()==0
    既然s是null,那么对他进行.length()肯定就报错了
    因为B的第一个(s!=null)时,得出false,就不进行以后的判断了,所以不报错阿
      

  9.   

    看 楼主 是对 s.length==0 不清楚呢
      

  10.   

    s.length()==0
    既然s是null,那么对他进行.length()肯定就报错了
    因为B的第一个(s!=null)时,得出false,就不进行以后的判断了,所以不报错阿===
    正解