轉(zhuǎn)暈乎了吧

          Posted on 2006-06-27 17:02 多力宇揚 閱讀(181) 評論(0)  編輯  收藏 所屬分類: Core Java

          轉(zhuǎn)型用于將一種類型轉(zhuǎn)換到另一種類型.看看下面的code運行后你猜會打印什么?
          ?public class Multicast
          {
          ?public static void main(String[] args)
          ?{
          ? System.out.println((int)(char)(byte)-1);
          ?}
          }
          ?轉(zhuǎn),轉(zhuǎn),轉(zhuǎn),我給轉(zhuǎn)暈了,從int數(shù)值-1開始,然后從int轉(zhuǎn)換為byte,之后轉(zhuǎn)為char,最后轉(zhuǎn)型回int.第一個轉(zhuǎn)型將數(shù)值從32為窄化到8位,第二個轉(zhuǎn)型從8位拓寬為16位,最后從16位拓寬到32位.這個數(shù)值最終回到起點了嗎?運行一看不就知道了嗎?
          Print:
          F:\Java Develop>javac Multicast.java

          F:\Java Develop>java Multicast
          65535
          啊,這么會是65535?
          oh,my god!有條規(guī)則: 如果最初的數(shù)值類型是有符號的,那么就執(zhí)行符號擴展;如果他是char,那么不管它將要被轉(zhuǎn)換成什么類型,都執(zhí)行另擴展.
          ?? 用這條規(guī)則來44看.因為byte是有符號的,所以在將byte數(shù)值-1轉(zhuǎn)換成char時.會發(fā)生符號擴展.作為結(jié)果的char數(shù)值16位就都被置位了,因此它等于2^16-1(2的16次方減1),就是65535.從char到int的轉(zhuǎn)型也是一個擴展,
          用規(guī)則來說它將執(zhí)行另擴展,而不是符號擴展.作為int的結(jié)果數(shù)值就是65535和打印的一樣.
          ?? 從這個例子我們得到一個教訓(xùn):如果通過觀察不能確定程序?qū)⒁鍪裁?那么它做的就很有可能不是你想要的.

          主站蜘蛛池模板: 苍南县| 五常市| 海伦市| 梅河口市| 武功县| 肥乡县| 凭祥市| 仁布县| 鄂州市| 兴海县| 上饶县| 咸丰县| 永城市| 平南县| 嘉善县| 积石山| 武隆县| 虞城县| 大庆市| 吉木萨尔县| 临城县| 荣成市| 乐东| 方城县| 宣化县| 汤阴县| 镇宁| 辽源市| 五指山市| 塔城市| 五大连池市| 渝中区| 眉山市| 礼泉县| 贡嘎县| 广河县| 潞城市| 土默特左旗| 崇明县| 灵台县| 城固县|