java類庫中java.util.Arrays 類的toString方法的源代碼。如下:
上面的文字摘自下面的文章:
http://www.aygfsteel.com/raylong1982/archive/2007/11/01/157542.html
我的理解是:
如果return語句唯一存在于for循環(huán)里面,for中間語句加入任何判斷條件,除非這個判斷條件絕對為真(如空語句、ture、3>2),否則判斷條件就有可能為假導致無法執(zhí)行到這個循環(huán)中的return語句,編譯器顯然不允許這種情況發(fā)生,所以當return語句只在for循環(huán)體內出現,就不允許for循環(huán)中間的那個語句出現類似i<=iMax這樣的充滿不確定性的判斷,語法上。簡單一句話,包含return的那個句子,至少要讓編譯器覺得,這個return是可以執(zhí)行到的,以減少程序運行后出錯的可能。
不過即使編譯器如此努力,還是架不住人們可能出現的語義上的錯誤,看下面這段代碼:
從語義上分析,return是無論如何也執(zhí)行不到的,但是編譯器認為for循環(huán)內的語句肯定可以執(zhí)行到,并且里面還有return語句,所以就想當然的認為應該可以執(zhí)行到return語句,所以沒有報錯。至于到底有沒有錯,想想看、試一下就知道了。呵呵
1
public static String toString(long[] a) {
2
if (a == null)
3
return "null";
4
int iMax = a.length - 1;
5
if (iMax == -1)
6
return "[]";
7
8
StringBuilder b = new StringBuilder();
9
b.append('[');
10
for (int i = 0; ; i++) {
11
b.append(a[i]);
12
if (i == iMax)
13
return b.append(']').toString();
14
b.append(", ");
15
}
16
}
for循環(huán)有點奇怪,中間的那個表達式是空的。其實即使加上了條件,for (int i = 0; i<=iMax ; i++) 和源程序是一個效果的,純粹是多余的,但是多余地加上了這條,結果編譯出錯了!提示沒有返回語句
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

上面的文字摘自下面的文章:
http://www.aygfsteel.com/raylong1982/archive/2007/11/01/157542.html
我的理解是:
如果return語句唯一存在于for循環(huán)里面,for中間語句加入任何判斷條件,除非這個判斷條件絕對為真(如空語句、ture、3>2),否則判斷條件就有可能為假導致無法執(zhí)行到這個循環(huán)中的return語句,編譯器顯然不允許這種情況發(fā)生,所以當return語句只在for循環(huán)體內出現,就不允許for循環(huán)中間的那個語句出現類似i<=iMax這樣的充滿不確定性的判斷,語法上。簡單一句話,包含return的那個句子,至少要讓編譯器覺得,這個return是可以執(zhí)行到的,以減少程序運行后出錯的可能。
不過即使編譯器如此努力,還是架不住人們可能出現的語義上的錯誤,看下面這段代碼:
1
public static int max(int a, int b){
2
for(;;)
3
if (false) return a>b?a:b;
4
}

2

3

4

從語義上分析,return是無論如何也執(zhí)行不到的,但是編譯器認為for循環(huán)內的語句肯定可以執(zhí)行到,并且里面還有return語句,所以就想當然的認為應該可以執(zhí)行到return語句,所以沒有報錯。至于到底有沒有錯,想想看、試一下就知道了。呵呵