JAVA基礎&String&StringBuffered&StringBuilder
String 類
字符串的特點:
1、java中用String類來描述字符串。
2、字符串一但初始化就不可以被改變,因為是個常量。所以可以被共享
String s = "abc";// 定義一個類類型的變量s指向了一個字符串對象
String s2 = new String("abc");
這兩個是有差別的,s對應的字符串在字符串緩衝池中。
當我們定義s2後此時在堆內存中創建了一個字符串對象,然後把緩衝池中的內容存放到對象中。
如何創建字符串對象呢?
1,直接使用 "".String s = "abc";
2,將一個字節數組或其中的部分變成字符串。
3,將一個字符數組或其中的部分變成字符串。
將數組變成字符串,可以用字符串構造函數來完成
String( char [] value ) 將字符數組轉換成字符串
/*
* 字符串的特點:
* 1,java中用String類來描述字符串。
* 2,字符串一但初始化就不可以被改變。因為是個常量。
*/
String s = "abc";//定義一個類類型的變量 s 指向了一個字符串對象。
String s1 = "abc";
System.out.println(s == s1);//true
String s2 = new String("abc");
System.out.println(s == s2);//false;
System.out.println(s.equals(s2));//String類的equals覆蓋了Object中的equals方法,
//用來判斷字符串對象的內容是否相同。
String a = "abcd";
String a1 = "ab";
String a2 = "cd";
String b = a1+a2;
String c = "ab"+"cd";
System.out.println("a==b:"+(a==b));
System.out.println("a==c:"+(a==c));
按照面向對象的思考方式來思考字符串對象的功能。
1,獲取;
1.1 獲取長度。
int length();
1.2 獲取字符串中的字符。
char charAt(index);
1.3一個字符或者一個字符串在一個字符串的中的位置。
int indexOf(ch)
int indexOf(string)
int indexOf(ch,fromIndex)
int indexOf(string,fromIndex)
int lastIndexOf(ch);
這些獲取索引位的方法,如果沒有要查找的內容,返回-1.
所以這個方法還有另一個應用,就是判斷字符或者字符串是否存在。
1.4獲取部分字符串。
String substring(begin,end);包含頭,不包含尾。
2,判斷。
2.1 是否包含指定的字符串。
boolean contains(string);
2.2 是否是以指定的字符串開頭。
boolean startsWith(string);
2.3 是否是以指定的字符串結尾。
boolean endsWith(string);
2.4忽略大小寫判斷字符串內容。
boolean equalsIgnoreCase(string);
3,轉換。
3.1 將字符串轉成大小寫。
String toLowerCase();
String toUpperCase();
3.2 將字符串轉成數組。
byte[] getBytes();//字節數組。
char[] toCharArray();//字符數組
3.3 將字符串轉成字符串數組。
String[]
3.4 將字符串中的中內容進行替換。
String replace(ch1,ch2);
String replace(string1,string2);
3.5 去除字符串兩端的空格。
String trim();
StringBuffer 是一個容器
當要創建一個對象的時候,首先查閱API文檔,看是否有
構造函數存在,如果有才能創建,否則無法創建此類的實例對象
字符串緩衝區的特點:
1、用於存儲數據的容器。
2、該容器的長度是可變的。
3、該容器可以存儲基本數據和引用數據類型
append() 支持常見數據類型 但是不能直接添加 byte 和 short
常見創建容器對象
StringBuffer sb = new StringBuffer();
既然是容器
應該具備一些常見的功能
1、添加數據
StringBuffer s1 = sb.append("ab"); 太爛了
StringBuffer s1 = sb.append("cd");
常用
sb.append("ab").append("cd"); 方法鏈調用
append是在結尾追加數據,前面數據和此時添加數據變成一個字符串
insert() 插入數據, StringBuffer insert(index , data) 根據指定的位置插入data數據
當前位置上的數據會被順延。
2、刪除數據
delete( int start , int end ) 一般有頭有尾的參數,一般都是包含頭不包含尾
清空緩衝區
sb.setlength(0);
StringBuffer sb = new StringBuffer();從新開闢了一個緩衝區
sb.delete(0.sb.length); 最合理
3、查找數據
char charAt(int index);
int indexOf(String str);
indexOf(String str, int fromIndex)
4、修改數據
setCharAt(int index, char ch);
replace(int start,int end,String str);
reverse();字符串換反轉
可變數組的原理:
字符串緩衝區和數組的區別:
1、數組是固定長度
字符串緩衝區是可變長度
2、數組中的元素類型是固定同一類型
字符串緩衝區的元素類型是任意類型,也可以是用一類型
3、數組對象,只有一個length屬性,然後通過角標操作數組的元素
字符串緩衝區是通過一系列的方法(怎刪改查)來炒作緩衝區中的元素
4、數組中的元素,通過角標直接訪問使用
字符串緩衝區的元素通常經過操作後,都要通過toString變成字符串使用。
StringBuilder 是JDK1.5 以後才出現的
是可以替代 Stringbuffer 的
但是他是線程不同步的,StringBuffer是線程同步的
雖然它在多線程時不安全,但是在單線程時效率高
StringBuilder 和 StringBuffer 的用法一模一樣
對於java的升級無外乎是哪個原因:
1、提高效率
2、簡化書寫
3、提高安全性
基本數據類型包裝成類
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
把基本數據類型封裝成對象有什麼好處呢?
可以吧對象中的定義更多的屬性和行為對基本數據值進行操作
比如,整數的範圍。如果整數被封裝成對象,那麼整數的取值範圍,當然是整數對象自己最清楚
所以只要調用對象中的屬性和行為就可以了。
基本數據類型包裝類,它的最常見作用之一:完成基本數據和字符串之間的轉換
完成字符串格式數值轉成整數
Integer.parseInt("23"+4);結果27
對於其他數據類型的字符串轉換方式都一樣
xxx a = Xxx.parseXxx(Xxxstring);
int a = Integer.parseInt("23");
但是需要注意有一種類型沒有轉換
Character
怎麼將整數轉成字符串呢?
int num = 4;
String s = num + "";
String s = Integer.toString(num);
怎麼將一個整數值封裝成對象呢?通過構造函數.還可以通過靜態方法valueOf的形式
Integer i1 = new Integer(4);
Integer i2 = new Integer("4");
sop(i1==i2); false
sop(i1.equals(i2)); true
怎麼將整數對象裝成整數呢?
使用 intValue方法
int y = i1.intValue()
將其他進制轉換成十進制
int x = Integer.parseInt("110",2);
sop(x+1);
在1.5版本後對基本數據類型對象包裝類進行升級,可以像操作解一般數據類型一樣,操作包裝類型數據
這就是升級中的簡化書寫
但是需要注意,在使用簡寫時,要注意z可以的取得值中多了一個null
如果自動裝箱的數據在byte範圍之內,同樣的數據不在開闢空間
基本數據用大小與符號比較
對象比較用compareTo比較
閱讀更多 竇你玩小陶 的文章