Java----三大特殊類
1.String類
1.1 string的兩種賦值方法
(1)直接賦值:String str="hello";
(2)傳統方法 String str=new String("hello");
1.2字串相等比較
String str1 = "Hello" ;
String str = new String("Hello") ;
System.out.println(str1==str); // false
比較的是兩個物件的地址值
String str1 = "Hello" ;
String str = new String("Hello") ;
System.out.println(str1.equals(str));//true
比較的是兩個字串的內容
1.3 字串常量是String 的匿名物件
String str1 = "Hello" ;
String str = new String("Hello") ;
System.out.println(str1.equals(str));//可能出現空物件
System.out.println("Hello".equals(str));
注意::在日後的開發過程之中,如果要判斷使用者輸入的字串是否等同於特定字串,一定要將特定字串寫在前面。
1.4 字串直接賦值與傳統方法(採用構造方法)的區別:
1. 直接賦值:只會開闢一塊堆記憶體空間,並且該字串物件可以自動儲存在物件池中以供下次使用。
2. 構造方法:會開闢兩塊堆記憶體空間,其中一塊成為垃圾空間,不會自動儲存在物件池中,可以使用intern() 方法手工入池。
1.5將字元陣列與字串間的相互轉換
String str = "helloworld" ; // 將字串變為字元陣列
char[] data = str.toCharArray() ;
for (int i = 0; i < data.length; i++) {
data[i] -= 32 ;
System.out.print(data[i]+"、"); }
// 字元陣列轉為字串
System.out.println(new String(data));
// 全部轉換
System.out.println(new String(data,5,5)); // 部分轉換
1.6 位元組與字串
String str = "helloworld" ;
byte[] data = str.getBytes() ; //位元組串轉化為位元組陣列
for (int i = 0; i < data.length; i++)
{ data[i] -= 32 ;
System.out.print(data[i]+"、"); } //位元組陣列轉化為字串
System.out.println(new String(data));
public byte[ ] getBytes(String charset): 按照指定編碼轉為位元組陣列
注:
出錯原因:1.編碼不一致
2.字串不完整
1.7字串是否區分大小寫比較
String str1 = "hello" ;
String str2 = "Hello" ;
System.out.println(str1.equals(str2)); // false 區分大小寫
System.out.println(str1.equalsIgnoreCase(str2)); // true 不區分大小寫
1.8 在String類中compareTo()方法是一個非常重要的方法,該方法返回一個整型,該資料會根據大小關係返回三類內 容:
1. 相等:返回0.
2. 小於:返回內容小於0.
3. 大於:返回內容大於0。
1.9 字串查詢:
重要方法:1.判斷子字串是否存在
String str = "helloworld" ;
System.out.println(str.contains("world")); // true
2.判斷是否以指定字串開頭,結尾
String str1="hello";
System.out.println(str1.startsWith("he",3)); //false
System.out.println(str1.startsWith("he",0)); //true
System.out.println(str1.endsWith("llo")); //true
1.10 字串替換
String str = "helloworld" ;
System.out.println(str.replaceAll("l", "_")); //he__owor_d
System.out.println(str.replaceFirst("l", "_")); //he_loworld
1.10 字串拆分
String str = "hello world hello bit" ;
String[] result = str.split(" ") ; // 按照空格拆分 字串全部拆分
for(String s: result)
{ System.out.println(s);}
String str = "hello world hello bit" ;
String[] result = str.split(" ",2) ; //字串按空格拆成兩部分
for(String s: result) { System.out.println(s);}
1.11 字串的擷取
1.從指定的索引擷取到結尾
2.從指定的索引擷取部分內容:左閉右開結構
String str = "helloworld" ;
System.out.println(str.substring(5)); //world
System.out.println(str.substring(0, 5)); //hello
1.12 字串大小寫轉換
String str = " heLLO woRlD" ;
System.out.println(str.toUpperCase()); //HELLO WORLD
System.out.println(str.toLowerCase()); //hello world
1.13 兩支sb(StringBuffer,StringBuiler)-----面試
1.字串拼接方法---只開闢一塊記憶體
public synchronized StringBuffer append(各種資料型別 b)
2.String類與StringBuffer的相互轉換
String ->StringBuffer
a.append()
b.呼叫StringBuffer構造方法 new StringBuffer();
StringBuffer ->String
呼叫 StringBuffer.toString();
3.字串的反轉
1.reverse(): StringBuffer
2.刪除指定範圍內的資料
delete(int start,int end):StringBuffer
insert(int offset,各種資料型別):StringBuffer
請解釋String、StringBuffer、StringBuilder的區別:
1. String的內容不可修改,StringBuffer與StringBuilder的內容可以修改.
2. StringBuffer(JDK 1.0)採用同步處理,屬於執行緒安全操作,效率較低;而StringBuilder(JDK 1.5)採用非同步處理,屬於執行緒不安全操作,效率較高,當在String物件進行“+”,編譯時會將String類變為StringBuilder進行append()處理。
2.Object類
Object類是JDK預設提供的一個類。java中除了Object類,所有類都存在繼承關係,預設會繼承Object類。
1.取得物件資訊
class Person{
private String name ;
private int age ;
public Person(String name, int age) {
this.age = age ;
this.name = name ;
}
}
class Student{}
public class Test {
public static void main(String[] args) {
fun(new Person("yuisama",25) );
fun("Hello");
}
public static void fun(Object obj) {
System.out.println(obj.toString()); // 預設輸出物件呼叫的就是toString()方法
2.字串比較
class Person{
private String name ;
2.4 接收引用資料型別
在之前已經分析了Object可以接收任意的物件,因為Object是所有類的父類,但是Obejct並不侷限於此,它可以接
收所有資料型別,包括:類、陣列、介面。
範例:使用Object來接受陣列物件
而Object可以接收介面是Java中的強制要求,因為介面本身不能繼承任何類。
範例:使用Object接收介面物件
private int age ;
public Person(String name, int age) {
this.age = age ;
this.name = name ;
}
@Override
public String toString() {
return "姓名:"+this.name+",年齡:"+this.age ;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false ;
}
if(this == obj) {
return true ;
}
// 不是Person類物件
if (!(obj instanceof Person)) {
return false ;
}
Person person = (Person) obj ; // 向下轉型,比較屬性值
return this.name.equals(person.name) && this.age==person.age ;
}
}
class Student{}
public class Test {
public static void main(String[] args) {
Person per1 = new Person("yuisama", 20) ;
Person per2 = new Person("yuisama", 20) ;
System.out.println(per1.equals(per2));}
}
3.接收引用資料型別
Object可以接收所有引用資料型別:陣列,類,介面
3.包裝類
包裝類就是將基本資料型別封裝到類中。
// 子類物件向上轉型 Object obj = new IntDemo(55) ;
IntDemo temp = (IntDemo) obj ; // 向下轉型
System.out.println(temp.intValue()); // 取出裡面的基本資料型別操作
將基本資料型別包裝為一個類物件的本質就是使用Object進行接收處理。
包裝類的分類:
1.數值型包裝類(Number的直接子類):Byte,Double,Short,Long,Float,Integer
會發生型別轉換異常 NumberFormatException
2.物件型包裝類(Object的直接子類):Boolean,Char.
裝箱:將基本資料型別變為包裝類物件,利用每一個包裝類提供的構造方法實現裝箱處理。
拆箱:將包裝類中包裝的基本資料型別取出。利用Number類中提供的六種方法。
關於基本資料型別與包裝資料型別的使用標準如下:
1) 【強制】所有的 POJO (簡單java類,類中只有成員變數,構造方法,getter/setter)類屬性必須使用包裝資料型別。
2) 【強制】RPC 方法的返回值和引數必須使用包裝資料型別。
3) 【推薦】所有的區域性變數使用基本資料型別。
3.字串與基本資料型別的轉換
字串轉為int型
String str = "123" ; // String型別
int num = Integer.parseInt(str) ;
System.out.println(num);
int型轉為字串
String str = String.valueOf(100) ;
System.out.println(str);