java解惑——循環,你真的會嗎??
使用StringBuffer時應該注意的:
StringBuffer sb = new StringBuffer('M');
sb.append("abc");
System.out.println(sb.toString());
該程序會輸出什么呢? 不是 mabc 輸入結果為: abc
為什么m沒有輸出來呢?奇怪了? 其實也不是很奇怪,StringBuffer沒有字符為參數的構造方法,只有int作為緩沖區初始容量的構造器。
在本例子中, new StringBuffer('M') 返回的是一個具有初始容量77的空字符串緩沖區。
**2******************************************************************************************************************
下面的程序循環遍歷byte數值,以查找某個特定值。這個程序會打印出什么?








結果什么都沒有打印。
0x90是一個兩位數的十六進制字面常量,每一個十六進制位都占據4個比特的位置,
所以整個數值也只占8個比特,即1個byte。問題在于byte是有符號類型,常量0x90是
一個正的最高位被置為8位int數值。合法的byte數值是從-128到+127,但是常量0x90等于+144
上面這個程序大家應該都能理解,但是下面整個判斷是true還是false呢?
( (byte)0x90 == 0x90 ) ,當然是false啦,有點java基礎知識的人都知道會轉化成int比較的,
但轉化后值是多少呢? 這個這個。。。。。hoho (byte)0x90 提升為int數值-122,而0x90為144
如果要實現比較,其實也很簡單。
方法一: 只要我們相同的類型比較就可以啦,蘋果跟蘋果比較,桔子跟桔子比較。
最上面的程序改成:
if (b == (byte)0x90)
System.out.println("hello");
這就可以打印出來了。
方法二:
可以用一個屏蔽碼來消除符號擴展的影響,從而將byte轉化為int,之后就可以拿到一個int與另一個int進行比較了。
if ( (b & 0xff) == 0x90)
System.out.println("hello");
雖然上面的兩種方法都可以,但是避免這類問題的最佳方法還是將常量值移到循環的外面,并在一個常量種定義它。

2

3

4

5

6

7

8

9

****3**************************************************************************************
下面的程序輸入結果是什么呢?











乍一看應該慧是100吧。 畢竟做了100次循環增量。 結果確是0
j = j++; 整個操作細分開來大家都知道:
int temp = j;
j = j+1 ;
j = temp;
那如果是這樣那么結果就不用懷疑了,j=0
****4***************************************************************************
下面的程序輸出什么呢?

2

3

4

5

6

7

8

9

10

11

應該是101吧,應該,那就是錯啦,實際上是:在for循環中,出現了無限循環。
當i達到Integer.MAX_VALUE時,并且再次執行增量操作時,它就又繞回到了Integer.MIN_VALUE。 所以就出現無限循環。
求:尋找一種定義,使得下面的循環一直無限,
(1). for(int i=start;i<=start+1;i++){}
(2). while(i== i+1){}
(3). while(i !=i ){}
(4). while(i!= i + 0 ){},附加要求,不能使用浮點數類型
(5). while(i<=j && i>=j && i!=j ){}
(6). while(i!=0 && i== -i ){}
解答(1):int start = Integer.MAX_VALUE-1; //不信你可以試一試
解答(2):可以用任何計算位無窮大的浮點算術表達式來實現:
double i = 1.0/0.0; 一般都使用浮點數常量:double i = Double.POSITIVE_INFINITY;事實上,不必將i初始化為無窮大,
任何足夠大的浮點數都可以實現這一目的。例如:double i = 1.0e40;
解答(3):double i=0.0/0.0; 即:double i = Double.NaN;
解答(4):把i定義成string類型就可以實現啦
解答(5):Integer i = new Integer(0); Integer j = new Integer(0);
解答(6):int i = Integer.MIN_VALUE; 或 long i = Long.MIN_VALUE;
尋找i一種定義,使得 if( i-i == 0 ){} if中的條件永遠為false?
解答:double i=0.0/0.0; 即:double i = Double.NaN;
posted on 2009-04-07 22:49 胡鵬 閱讀(284) 評論(0) 編輯 收藏 所屬分類: java基礎