switch (0) {
    case 0:
Log.e("Switch", "false");
return false;    default:
Log.e("Switch", "true");
return true;
}返回是false
---------------------------------------------------
如果代码是switch (0) {
    case 0:
//Log.e("Switch", "false");
return false;    default:
//Log.e("Switch", "true");
return true;
}返回是true,求解释。

解决方案 »

  1.   

    原因不是很清楚
    但是你的switch有点问题啊
    在每个case后面应该有break吧
      

  2.   

    一点都不诡异!
    楼主应该先了解了解 switch 的用法,就知道一点都不诡异拉!
    break很重要哦 
      

  3.   

    除了break,楼主应该学习一下音频跟踪,难道没有发现代码会执行每一个case吗
      

  4.   

    LZ,你别信楼上的吹牛B,经调试,你的代码结果应该是一样的。,要么楼主你的判断有误!还是LZ开玩笑?
      

  5.   


    感觉都是return false;
    怎么回事?
      

  6.   

    是你们不了解switch 吧,return下面能break吗? 你写写试试直接报错。
      

  7.   

    debug追踪一下不好么。。
    还有 switch最好别放return
    最好boolean一个局部变量,在case里修改这个局部变量的值。
    最后在return这个局部变量。很多公司都有要求的,一个方法只能有一个return。
      

  8.   


    学习了,有时候虽然很方便,但是如果多个return 的时候 对于后期的维护 可能会带来麻烦。一进一出 学习了!
      

  9.   

    建议LZ在case中不要使用return这玩意
      

  10.   

    很诡异 写个单例确实是2个结果都是一样的,但在项目有时却不一样。还是按照zqpeng观点,case中不要使用return这玩意。 
      

  11.   

    如果你的环境测试真如你说的,有3个可能性:1.你的常量宏编译器优化了;
    2.如果你switch(0)的0其实是变量,而你简化而已,就是你自己算法真实运作跟你的想法有不同, 很多情况我们都为了不可能的大意调试大半天,逐步断点跟踪解决;
    3.如为变量,内存溢出覆盖了这些区域,这个情况是其它地方内存溢出修改了
      

  12.   

    都是false吧,你的函数都return了,还怎么执行后面的?
      

  13.   


    你说的第2点0是确实是变量,断点我跟踪了值是0,结果走default,我很难理解。还有switch所在方法我设置成是static。
      

  14.   

    正常应该都返回false,
    return了还要break干嘛?
      

  15.   


    这个说明你项目中的代码有问题,你再认真找找,比如是不是在某种条件下才return,而其他条件没return又没break呢?
      

  16.   

    首先,Switch的case中如果有return ,是不需要break的如果你switch(0)的0变量,暂且说是o,这个变量是不是静态的?
    如果这个变量是函数内的局部变量,则你说的情况绝不会发生。如果这个变量是静态的。那原因就是没有对这个变量进行保护,被别的线程改写了。你可以新建一个函数内局部变量来存放一下这个值,调试一下看看,是不是还是这样
    如:
    int oLocal=o;//复制一份静态变量到局部空间
    oLocal=oLocal;//在这儿打个断点,看一下这个值,希望不会被优化掉,呵呵。
    switch(oLocal)
    ......
      

  17.   

    本人是大神,两个都是返回false,鉴定完毕!