使用StringBuffer時應該注意的: StringBuffer sb = new StringBuffer('M'); sb.append("abc"); System.out.println(sb.toString());
該程序會輸出什么呢? 不是 mabc 輸入結(jié)果為: abc 為什么m沒有輸出來呢?奇怪了? 其實也不是很奇怪,StringBuffer沒有字符為參數(shù)的構(gòu)造方法,只有int作為緩沖區(qū)初始容量的構(gòu)造器。 在本例子中, new StringBuffer('M') 返回的是一個具有初始容量77的空字符串緩沖區(qū)。
**2******************************************************************************************************************
下面的程序循環(huán)遍歷byte數(shù)值,以查找某個特定值。這個程序會打印出什么?
結(jié)果什么都沒有打印。 0x90是一個兩位數(shù)的十六進制字面常量,每一個十六進制位都占據(jù)4個比特的位置, 所以整個數(shù)值也只占8個比特,即1個byte。問題在于byte是有符號類型,常量0x90是 一個正的最高位被置為8位int數(shù)值。合法的byte數(shù)值是從-128到+127,但是常量0x90等于+144
上面這個程序大家應該都能理解,但是下面整個判斷是true還是false呢? ( (byte)0x90 == 0x90 ) ,當然是false啦,有點java基礎(chǔ)知識的人都知道會轉(zhuǎn)化成int比較的, 但轉(zhuǎn)化后值是多少呢? 這個這個。。。。。hoho (byte)0x90 提升為int數(shù)值-122,而0x90為144
如果要實現(xiàn)比較,其實也很簡單。
方法一: 只要我們相同的類型比較就可以啦,蘋果跟蘋果比較,桔子跟桔子比較。 最上面的程序改成: if (b == (byte)0x90) System.out.println("hello"); 這就可以打印出來了。
方法二: 可以用一個屏蔽碼來消除符號擴展的影響,從而將byte轉(zhuǎn)化為int,之后就可以拿到一個int與另一個int進行比較了。 if ( (b & 0xff) == 0x90) System.out.println("hello");
雖然上面的兩種方法都可以,但是避免這類問題的最佳方法還是將常量值移到循環(huán)的外面,并在一個常量種定義它。
****3************************************************************************************** 下面的程序輸入結(jié)果是什么呢?
乍一看應該慧是100吧。 畢竟做了100次循環(huán)增量。 結(jié)果確是0
j = j++; 整個操作細分開來大家都知道: int temp = j; j = j+1 ; j = temp;
那如果是這樣那么結(jié)果就不用懷疑了,j=0
****4***************************************************************************
下面的程序輸出什么呢?
應該是101吧,應該,那就是錯啦,實際上是:在for循環(huán)中,出現(xiàn)了無限循環(huán)。 當i達到Integer.MAX_VALUE時,并且再次執(zhí)行增量操作時,它就又繞回到了Integer.MIN_VALUE。 所以就出現(xiàn)無限循環(huán)。
求:尋找一種定義,使得下面的循環(huán)一直無限, (1). for(int i=start;i<=start+1;i++){} (2). while(i== i+1){} (3). while(i !=i ){} (4). while(i!= i + 0 ){},附加要求,不能使用浮點數(shù)類型 (5). while(i<=j && i>=j && i!=j ){} (6). while(i!=0 && i== -i ){}
解答(1):int start = Integer.MAX_VALUE-1; //不信你可以試一試 解答(2):可以用任何計算位無窮大的浮點算術(shù)表達式來實現(xiàn): double i = 1.0/0.0; 一般都使用浮點數(shù)常量:double i = Double.POSITIVE_INFINITY;事實上,不必將i初始化為無窮大, 任何足夠大的浮點數(shù)都可以實現(xiàn)這一目的。例如:double i = 1.0e40; 解答(3):double i=0.0/0.0; 即:double i = Double.NaN; 解答(4):把i定義成string類型就可以實現(xiàn)啦 解答(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 胡鵬 閱讀(282) 評論(0) 編輯 收藏 所屬分類: java基礎(chǔ)