本帖最后由 h47966392 于 2010-09-01 08:54:34 编辑

解决方案 »

  1.   

    简单的看了一下,应该是逻辑有问题,应该不会走到那里。我们分析看:
    如果走到if(remaining > newCapacity )那么remaining 肯定会大于newCapacity 
    而newCapacity是通过capacity赋值得到的,然后通过
    Math.max( minCapacity , newCapacity ) ;
    所以newCapacity的值肯定是》=capacity值的。
    而前提的条件是:remaining <= capacity >>> 2
    那么肯定remaining 小于capacity 
    所以不会走的!
      

  2.   

    看了下是不会走到if ( remaining > newCapacity ) {}这个块里的。
    int minCapacity = Math.max( minimumCapacity , remaining << 1 ) ; // 这里 minCapacity >= 2 * remaining;newCapacity = Math.max( minCapacity , newCapacity ) ;  // 这里 newCapacity >= 2 * remaining;// 所以不可能到这个if块里
    if ( remaining > newCapacity ) {
        //
    }
      

  3.   

    这是mina2的源码里面的     呵呵  我也看了半天实在想不出来怎么会进去那个if里面负数的情况应该不会出现
      

  4.   


    其实 newCapacity = Math.max( minCapacity , newCapacity ) ;
    这一段代码  是不是可以不用啊  他一定取的是newCapacity 的值   
    高手指导下  是不是可以不需要这段代码
      

  5.   

    看不懂。还得深入研究ja va api!学习中!