问个弱弱的问题,请问while(--j<0 && temp<array[j])与while(temp<array[j] && --j<0)有区别么?
假设有以下代码行
int [] array = new int[]{23,67,45,54};
int temp=4;
int j=3;
请问这时while(--j>0 && temp<array[j])与while(temp<array[j] && --j<0)有区别么?
while(--j<0 && temp<array[j])中的temp<array[j]中的j值是经过--j运算后的j值(4)吗?执行这整个while后的j值是?
那么while(temp<array[j] && --j<0)又是如何运算的呢?执行这整个while后的j值是?

解决方案 »

  1.   

    从语法的角度上来讲没有区别
    从逻辑的角度上来讲就有区别了
    当j<0的时候array[j] 会出异常... 
    while(--j>0 && temp<array[j]) 当--j>0不成立时 就不会继续去比较temp<array[j]
    --j 是先自减再使用 所以 temp<array[j] 中的j=2
    while(temp<array[j] && --j<0) 
    temp<array[j]的j=3 ,(--j<0) j=3 先自减1 再与0比较
      

  2.   

    condition1&&condition2
    condition1满足情况下 才会检测condition2..
      

  3.   

    还有个问题哦    我想问下运行这段代码之后:while(--j<0 && temp<array[j])或while(temp<array[j] && --j<0),j的值和原初始化的值相比会不会有什么改变呢?
      

  4.   

    还有,像你以上回答的,那么语法上就有区别了,while(--j<0 && temp<array[j])中的array[j]中的j值为2,而while(temp<array[j] && --j<0)中的temp<array[j])中的j值为3           
      

  5.   

    从语法到逻辑都有区别,而且区别很大...1.&&是短路与逻辑,若第一个表达式成立则完全忽略第二个表达式...2.前缀减量操作返回操作数减小之后的值...顺序不同,这个表达式就是完全不同的意思...
      

  6.   

    我加个常见例子,看看把它反过来有什么效果:) string str = null;
    if( str != null && str.ToUpper() == "RED" )
    {
       //
    }