qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          Java String 十大常見問題

          1.字符串比較,使用“==”還是equals()?
            "=="判斷兩個引用的是不是同一個內(nèi)存地址(同一個物理對象)。
            equals()判斷兩個字符串的值是否相等。
            除非你想判斷兩個string引用是否同一個對象,否則應(yīng)該總是使用equals()方法。
            如果你了解字符串的駐留(String Interning)則會更好地理解這個問題。
            2. 對于敏感信息,為何使用char[]要比String更好?
            String是不可變對象,意思是一旦創(chuàng)建,那么整個對象就不可以改變,即使新手覺得String引用變了,實(shí)際上只是(指針)引用指向了另一個(新的)對象。
            而程序員可以明確地對字符數(shù)組進(jìn)行修改,因此敏感信息(如密碼)不容易在其他地方暴露(只要你用完后對char[]置0).
            3.在switch語句中使用String作為case條件
            從JDK7開始,Java 6及以前的版本都不支持這樣做的
            // 只在java 7及更高版本有效!
          switch (str.toLowerCase()) {
          case "a":
          value = 1;
          break;
          case "b":
          value = 2;
          break;
          }
            4.轉(zhuǎn)換String為數(shù)字
            對于非常大的數(shù)字請使用long.代碼如下:
            int age = Integer.parseInt("10");
            long id = Long.parseLong("190"); // 假如值可能很大.
            5.如何通過空白符拆分字符串
            String的split()方法接收的字符串會被當(dāng)做正則表達(dá)式解析。
            "\s"代表空白字符,如空格"",tab制表符"\t",換行"\n",回車"\r".
            而編譯器在對源代碼解析時(shí),也會進(jìn)行一次字面轉(zhuǎn)碼。所以需要"\\s".
            String[] strArray = aString.split("\\s+");
            6.substring()方法內(nèi)部是如何處理的?
            在JDK6中,substring()方法還是共用原來的char[]數(shù)組,通過偏移和長度構(gòu)造了一個"新"的string.
            想要substring取得一個全新創(chuàng)建的對象,使用如下這種方式:
            String sub = str.substring(start, end) + "";
            當(dāng)然Java 7中,substring()創(chuàng)建了一個新的char[]數(shù)組,而不是共用。想了解更多,請參考:JDK6和JDK7中String的substring()方法及其差異
            7.String vs StringBuffer vs StringBuilder
            StringBuilder是可變的,因此可以在創(chuàng)建以后修改內(nèi)部的值。
            StringBuffer是同步的,因此是線程安全的,但是效率相對更低。

          8.如何重復(fù)拼接同一個字符串?
            方案一:使用Apache Commons Lang庫的StringUtils工具類。
            String str = "abcd";
            String repeated = StringUtils.repeat(str,3);//abcdabcdabcd
            方案二:使用StringBuilder構(gòu)造,更靈活。
          String src = "name";
          int len = src.length();
          int repeat = 5;
          StringBuilder builder = new StringBuilder(len * repeat);
          for(int i=0; i<repeat; i++){
          builder.append(src);
          }
          String dst = builder.toString();
            9.如何將String轉(zhuǎn)換成日期?
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String str = "2013-11-07";
            Date date = format.parse(str);
            System.out.println(format.format(date));//2013-11-07
            10.如何統(tǒng)計(jì)某個字符出現(xiàn)的次數(shù)?
            同樣使用Apache Commons Lang 庫StringUtils類:
            int n = StringUtils.countMatches("11112222", "1");
            System.out.println(n);

          posted on 2014-11-06 10:37 順其自然EVO 閱讀(155) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄

          <2014年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 普兰店市| 河北省| 临海市| 深水埗区| 调兵山市| 临城县| 潜江市| 保定市| 抚州市| 昌都县| 新竹市| 满城县| 普陀区| 邳州市| 绥化市| 陵川县| 新乐市| 合水县| 大姚县| 云南省| 庆元县| 邯郸县| 封开县| 方正县| 昂仁县| 北宁市| 云龙县| 扎赉特旗| 历史| 麻城市| 策勒县| 平湖市| 武宣县| 屏东市| 苏尼特左旗| 石屏县| 双柏县| 罗平县| 巧家县| 博罗县| 广德县|