&&和||都具有短路特性。我们举个实际的小应用作为反思。
private static void andTest() { int array[] = {1,2,3,4,5}; int i = 0; while(array[i] != 0 && i < 5) { i++; } }
这种写法时,当 i = 5 后,还是会进while()循环进行判断,这样的话array数组内存溢出,出异常: java.lang.ArrayIndexOutOfBoundsException。
如果我们将while循环中的两个判断条件换过来写,如下。
private static void andTest() { int array[] = {1,2,3,4,5}; int i = 0; while(i < 5 && array[i] != 0) { i++; } }
这样一旦识别到 i =5 后会立马跳出循环,不会去处理数组下标的问题,就不错出现异常问题。
所以,在&&和||短路用法上要多注意,用得好可以优化自己的程序,不需要额外加判断语句等来避免异常的发生。