1. 程式人生 > >JavaSE中容易忽視的坑

JavaSE中容易忽視的坑

基本數據 val war for 都是 java end 數據 int

1、想循環三次,這樣有啥問題?
`

private static final int END = Integer.MAX_VALUE;
private static final int START = END - 2;   
int count = 0;
for (int i = START; i <= END; i++)
    count++;
System.err.println(count);` 
``

開始我以為存在的問題會是 i 達到 int 的最大值後再加 1 會溢出,但是後來發現沒有拋出異常,並不是這個原因。經分析發現 : i = Integer.MAX_VALUE + 1 的時候,i = Integer.MIN_VALUE。 所以每次達到最大值再加一之後,又會從最小值開始循環,所以這個存在的問題是 死循環。


2、這個方法返回的是啥?

@SuppressWarnings("finally")
public static boolean find() {
try {
  System.err.println("try:---");
  return true;
} catch (Exception e) {
  System.err.println("catch:---");
  return true;
} finally {
  System.err.println("finally:---");
  return false;
}

}

這個方法最後返回的是:false。 當 finally 裏面有返回值時,會覆蓋 try 和 catch 裏面的返回值。 finally 裏面的非return 語句會在 try 和 catch 的 return 語句執行之前執行。

因為在一個方法內部定義的變量都是存儲在 棧 中的,當這個函數結束後,其對應的棧就會被收回,此時在其方法體重定義的變量將不存在。所以 return 在返回時不是直接返回變量的值,而是復制一份,然後返回。因此,對於基本數據類型來說,在 finally 塊中改變 return 的值對返回值沒有影響,而引用類型的數據會有影響。

JavaSE中容易忽視的坑