java學習之字符串

java中字符串的有三種java

String           ---稱爲靜態字符串,一經定義就長度和內容不在改變,一旦改變就會生成新的字符串,在頻繁進行字符串拼接的時候後會產生大量零散內存單元,家中jvm內存回收壓力,若是字符串內容不發生改變,則沒有問題算法

StringBuffer       ---動態字符串,長度和內容均可以改變的字符串,但由於stringbuffer中大量方法都是線程同步的,該類通常用於多線程編程,在非線程環境下應用該類須要額外維持線程開銷,性能不佳。sql

StringBuilder      ---從java5開始,對於非線程環境的動態數組, 是stringbuffer的替代類,取消了線程同步開銷的問題編程

三種類型  針對不一樣環境使用。數組

string str=「123」  ;string str2=str+「456」; +號是字符串拼接  至關於又生成了一個新的內存叫str2來存儲str和「456」這兩部分的內容多線程

stringbuffer  和stringbuilder 用於sql語句拼接app

//定義sql
            StringBuilder sql=new StringBuilder()
                    .append("SELECT A.AAB102,A.AAB103,A.AAB104,A.AAB105,TO_CHAR(A.AAB106,'YYYY-MM-DD') AAB106 ") 
                    .append("  FROM AB01 A")
                    .append(" WHERE A.AAB101=?")
                    ;
stringbuffer舉例

字符串string比較方法 equals  比較的是地址 引用 可是字符串string重寫了equals方法 比較的是內容,equals不是final修飾 能夠被重寫jvm

private static void stringTest1()
    {
        String str1="1223";
        String str3="1223";
        StringBuffer sbf1=new StringBuffer()
                .append("1223")
                ;
        boolean tag=str1.equals(sbf1);
        System.out.println(tag);
        tag=str1.equals(str3);
        System.out.println(tag);
        System.out.println(str1.hashCode()+"str3: "+str3.hashCode());
    }
equal 與 ==

equals是Object 定義的一個比較方法  而==叫作比較暈算法;ide

依據object原始定義 equals和== 並沒有區別都是比較兩個變量是否引用了同一個地址性能

代碼最後用了 hashcode方法 是hash碼,生成此碼有兩種方式,

一是 根據內存地址  默認方式

 另外一個根據內容生成散列碼在string中

tostring 方法  打印出 

該對象所屬類的完整路徑+」@」+該對象的內存地址

java5之後具備 自動裝箱拆箱   針對八大基本類型的基本類

 

注意 八大基本類型與其封裝類都屬於傳值

在封裝類中定義了一些靜態方法能夠實現類型的轉換

//手動裝箱
        int i=1;
        Integer i1=new Integer(i);
        //手動拆箱
        i=i1.intValue();
        //自動拆箱
        int c=i1;
        Integer d=c;
封裝類 基本類 自動裝箱

字符串轉換成數值類型

String str="123456789";
        int ival=Integer.parseInt(str);
字符串轉換整形

注意字符串中有別的字符會拋出異常,有小數也不行,由於轉換成int,字符串不能是null 都會會拋出java.lang.NumberFormatException 異常

相應的字符串能夠轉換成 double類型

String str="1233.22";
        Double dval=Double.parseDouble(str);
        System.out.println(dval);
字符串轉換成double

基本類型也能夠轉換成字符串

int a=100;
        String str=a+"";
        String sval=String.valueOf(a);
        System.out.println(str+" "+sval);
int 轉換成 字符串

一樣的其他基本類型 也能夠 調用相應方法就行啦 valueof(參數)  參數包括各類基本類型

對象類型轉換成字符串  封裝類

Integer i=100;
        String str=i.toString();
        String str2=String.valueOf(i);
        String str3=i+"";
        System.out.println(str.hashCode()+"str2: "+str2.hashCode()+"str3 :"+str3.hashCode());
封裝類 轉換成 字符串 三種方法

特別注意 當封裝類是 null是 第一種方法 tostring是空指針異常   java.lang.NullPointerException  由於 null。方法 是沒法找到的

好比一個頗有意思的小問題 integer a=null; int b=a+20;  打印輸出b  結果是什麼 

是空指針異常   就是 a是封裝類 與整型20相加  須要轉換成 整型 會先拆箱  可是拆箱的時候 a是null、就至關於null。intvalue方法 就引起異常啦

基本類型與其封裝類的共同父類是 java.lang.number 

仍是迴歸主題 字符串 

字符串是比較忽略大小寫問題 能夠本身寫方法實現(根據其ASCII碼特色,將其轉換成統一大寫或小寫 在比較),也能夠用其提供的方法equalsIgnoreCase()方法;

字符串比較大小 ,其提供的方法是從字符串左邊開始比較 返回第一個大的字符的字符串。好比123就比1204大 由於第三個字符比較時第一個字符串大

字符串檢索 : indexOf()方法 ,括號裏是檢索的目的串 返回目的串出現的首地址下標

String str="adsdasdsa";
                   //下標012345678
            System.out.println(str.indexOf("sd"));
檢索字符串

代碼執行結果打印2  若沒有檢索到目的串 就返回-1;

字符串截取:方法1 substring(參數1,參數2);該方法能夠從參數1開始截取到參數2  ;參數1下標 <= 目的串<參數2 下標   

      方法2 substring(參數1);從參數1 下標但是截取到最後  ;

方法1中若是參數2超出字符串最大下標會拋出異常 : java.lang.StringIndexOutOfBoundsException

字符串替換方法: replace(「原」,「目的」);把原替換成目的 返回一個新串 ,原串不改變

    String str="adsdasdsa";
                   //下標012345678
            System.out.println(str.substring(2, 6));
截取下標2-6
相關文章
相關標籤/搜索