qqjianyue代碼工

          砌java代碼
          posts - 62, comments - 9, trackbacks - 0, articles - 10
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Java 常考基礎題

          Posted on 2008-11-09 10:26 Qzi 閱讀(329) 評論(0)  編輯  收藏 所屬分類: java foundation
          基本類型:
          布爾類型:boolean不能夠自動也不能強制轉換成其他類型,但是可以進行&,&&,|,||運算
          字符類型:char(16)其他基本類型不能夠自動轉變為字符類型,但可以強制轉換為char,但是可以有截斷現象
          整形類型:byte(8),short(16),int(32),long(64)初始化的時候都是使用整數字面量直接賦值,但是byte與byte,short與short變量相加,默認都得到int的值,所以必須強制轉換才能夠返回原來類型的值(例如:(byte)(b1+b2))
          浮點類型:float(32),double(64)浮點數的字面量默認都是double類型,所以需要強制轉換成float才能夠初始化float,或者加上f或F后綴。(例如float f1 = 1.4F或者float f1 = (float)1.4

          整形還可以使用八進制(以0開頭的整形數字字面量)、十六進制(以0x開頭的整形字面量)初始化;
          浮點型:字面量不可以是八進制十六進制,但int可以自動轉化為浮點,所以仍然可以使用8進制16進制初始化,但是可以使用浮點計數法初始化,同樣可以加上f或d后綴,例1.23e+33F等
          字符型char可以直接使用

          unicode轉義符:
          \uXXXX 四個16進制的數,在文本里面就是代表著某個字符,所以可以'\uXXXX'初始化一個char,可以\u0022\uXXXX\u0022初始化一個String,因為剛好\u0022代表雙引號。當然\uXXXX不能是雙引號,否則就編譯出錯了。

          自動類型轉換:byte---short---int---long---float---double
          但是short與char不能夠相互自動轉換,但是可以相互強制轉換
          整型字面量可以初始化char,只要不超過65535的范圍,也就是也能夠使用8進制16進制初始化,但是整型變量不能夠賦值給char;
          char可以自動轉換成int及以上

          變量聲明與定義:
          int[] intArray;    //OK
          int intArray[];    //OK
          前面的加上 “= new int[變量or常量]” 都是可以的,但是“= new int(5)”是錯誤的
          int[] intArray[];  //OK,但是代表的是數組的數組
          int[5] intArray;  //False
          int intArray[5];  //False

          三目運算符:
          ?:返回不同類型問題,跟C++稍微不同,無論返回值在第一表達式還是第二表達式,返回值都是根據高階類型返回,例子:
          true ? 'a' : 9          返回結果是字符類型,所以字符類型是高階類型
          true ? 'a' : 9.0       返回結果是浮點類型(對于double和float都是),所以浮點比字符類型高階
          ture ? 9 : 9.0        返回結果是浮點類型,明顯
          true ? "abc" : 9     返回結果是字符串類型,因為字符類型較高階
          true ? 對象1實例 : 對象2實例      返回結果是最大共同父類,所以如果其中一個是另外一個的子類,那么就返回父類,如果互不繼承關系,則返回Object。

          String總結:
          首先聲明,==判斷是判斷對象引用的實例是否相同,即實例是否真正在相同的位置
          Object默認的equals方法與==是一樣的(就是引用相同實例),String類重寫equals方法和hashCode方法,只要內容相同就返回ture(一般自己寫的類也建議重寫equals方法和hashCode方法)。所以這時候==與equals就具有不相同意義了。
          http://www.javaeye.com/topic/122206
          1. 首先String不屬于8種基本數據類型,String是一個對象。
           因為對象的默認值是null,所以String的默認值也是null;但它又是一種特殊的對象,有其它對象沒有的一些特性。
          2. new String()和new String("")都是申明一個新的空字符串,是空串不是null;
          3. String str="string";
          String str1="string";
          String str2=new String ("string");
          String str3="str" + new String("ing");
          關于常量池概念,java虛擬機在常量池中只維持一個字符串的示例,所以str與str1引用都是引用常量池里面的共同實例,關鍵的是只有常量池里面的String才是唯一的,new空間里面的并不是。
          但是str2,str3(而且str2與str3的空間地址也肯定不一樣的,引用的是新建空間堆里的實例,所以str==str1,str!=str2,str1!=str2,str1!=str3,str2!=str3
          但是它們幾個使用equals都是返回true的,因為String類的hashCode函數根據內容返回hashCode碼,這個碼相同,則equals就返回true了,具體的equals與hashCode解釋可以參照《java核心技術 卷1 基礎知識》
          注意:成員函數intern() :
          當一個String實例str調用intern()方法時,Java查找常量池中是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒有,則在常量池中增加一個Unicode等于str的字符串并返回它的引用;
          所以:
          String str1="string";
          String str2=new String ("string");
          str1==str2.intern()          返回true
          主站蜘蛛池模板: 渝中区| 竹北市| 宝兴县| 繁昌县| 西丰县| 皋兰县| 唐海县| 黄石市| 永年县| 凌源市| 汾西县| 明水县| 呼和浩特市| 棋牌| 宜兰县| 石家庄市| 二连浩特市| 肥西县| 泉州市| 兴城市| 乌鲁木齐市| 平乡县| 富平县| 赤壁市| 淮安市| 宁陕县| 庆元县| 拜城县| 安义县| 大厂| 分宜县| 彝良县| 翼城县| 海丰县| 哈密市| 英吉沙县| 嘉善县| 岳西县| 邵武市| 汕头市| 思茅市|