1. 程式人生 > >Java----三大特殊類

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);