<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java解惑——循環(huán),你真的會嗎??

    使用StringBuffer時應(yīng)該注意的:
      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ù)值,以查找某個特定值。這個程序會打印出什么?

    public class BigDelight {
     
    public static void main(String[] args) {
      
    for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++{
       
    if (b == 0x90)
        System.out.println(
    "hello");
      }

     }

    }



     

    結(jié)果什么都沒有打印。
      0x90是一個兩位數(shù)的十六進制字面常量,每一個十六進制位都占據(jù)4個比特的位置,
    所以整個數(shù)值也只占8個比特,即1個byte。問題在于byte是有符號類型,常量0x90是
    一個正的最高位被置為8位int數(shù)值。合法的byte數(shù)值是從-128到+127,但是常量0x90等于+144


    上面這個程序大家應(yīng)該都能理解,但是下面整個判斷是true還是false呢?
    ( (byte)0x90 == 0x90 ) ,當(dāng)然是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)的外面,并在一個常量種定義它。

    1public class BigDelight {
    2 private static final byte TARGET = (byte)0x90;
    3 public static void main(String[] args) {
    4  for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++{
    5   if ( b == TARGET )
    6    System.out.println("hello");
    7  }

    8 }

    9}

     

     




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

    public class Incremet {
     
    public static void main(String[] args) {
      
    int j = 0;
      
    for(int i=0;i<100;i++){
       j 
    = j++;
      }

      System.out.println(j);
     }


    }

     


    乍一看應(yīng)該慧是100吧。 畢竟做了100次循環(huán)增量。   結(jié)果確是0


    j = j++; 整個操作細分開來大家都知道:
    int temp = j;
    j = j+1 ;
    j = temp;

     那如果是這樣那么結(jié)果就不用懷疑了,j=0

    ****4***************************************************************************


    下面的程序輸出什么呢?

     1public class InTheLoop {
     2 public static final int END = Integer.MAX_VALUE;
     3 public static final int START = Integer.MIN_VALUE;
     4 public static void main(String[] args) {
     5  int count = 0;
     6  for(int i=START;i<=END;i++){
     7   count ++;
     8  }

     9  System.out.println(count);
    10 }

    11}

     

    應(yīng)該是101吧,應(yīng)該,那就是錯啦,實際上是:在for循環(huán)中,出現(xiàn)了無限循環(huán)。
    當(dāng)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ǔ)

    導(dǎo)航

    <2009年4月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    統(tǒng)計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无人在线观看免费高清| 一区二区三区免费高清视频| 久久久久久久久无码精品亚洲日韩| 亚洲国产午夜精品理论片在线播放 | 色吊丝性永久免费看码| 最近的2019免费中文字幕| 最近中文字幕电影大全免费版 | 亚洲av日韩综合一区在线观看| 亚洲欧洲高清有无| 亚洲hairy多毛pics大全| 一级毛片免费播放男男| 国产高清不卡免费视频| 歪歪漫画在线观看官网免费阅读 | 精品少妇人妻AV免费久久洗澡| 国产亚洲精品国看不卡| 亚洲视频一区在线播放| 相泽南亚洲一区二区在线播放| 青青操免费在线观看| 中文字幕无码免费久久99| 亚洲成av人片在线观看天堂无码| 久久久久亚洲AV片无码| 亚洲精品av无码喷奶水糖心| 黄色视频在线免费观看| 无遮免费网站在线入口| 国产成人99久久亚洲综合精品 | 亚洲av成人无码久久精品| 亚洲一线产区二线产区区| 色www永久免费| 成年人免费网站在线观看| 亚洲熟妇av一区二区三区| 97se亚洲国产综合自在线| av电影在线免费看| 114一级毛片免费| 亚洲国产成人影院播放| 亚洲精品第五页中文字幕| 日产久久强奸免费的看| 国产人在线成免费视频| 亚洲色精品vr一区二区三区| 亚洲欧美日韩中文高清www777| 久久午夜无码免费| 亚洲国产天堂久久久久久|