【JavaSE】三個特殊類:String、Object、包裝類

概念部分

1 String類
	兩種實例化方式:(區別)
		直接賦值法:只開闢一塊堆內存,且該字符串對象可以自動保存在常量池中以供下次使用。
		傳統方法:開闢兩塊堆內存,一塊成垃圾空間,不會自動保存在常量池,可intern()手工入池。
	字符串比較:
		“==”比的是對象所保存的內存地址數值
		內容比較用str1.equals("str2")
		注意:開發中將特定字符串寫在前面,用戶輸入的寫在括號裏,否則可能產生空指針異常
	String類設計使用了共享設計:(減小開銷)
		在JVM底層自動維護一個常量池,直接賦值的String被保存其中,
		若下次繼續使用直接賦值法,則去常量池中找,
		若有指定內容直接引用;若沒有則開闢新的字符串對象保存在常量池中。
	採用構造方法(傳統):
		String str = new String("hello");
		若使用如上構造方法就會開闢兩塊堆內存空間,new一塊,hello自己一塊,
		後者將成爲垃圾空間,使字符串共享也產生問題。
	手動入池操作:
		String str = new String("hello").intern();
		intern()方法將new的空間入池。
	字符串:
		所有語言對於字符串的底層實現都是字符數組。
		字符串常量不可變,但字符串對象引用可以一直變,這樣會產生大量垃圾空間。
	字符串常用方法:
		str.charAt(int index);	取得指定索引位置字符,從0開始。
		str.toCharArray();	將字符串變爲字符數組返回。
		str.getBytes();	 將字符串以字節數組形式返回。
		str.equals();	區分大小寫比較
		str.equalsIgnoreCase();	不區分大小寫比較
		str.compareTo();  比較兩個字符串大小,=0<-1>1。常用來區分大小寫。
		str.contains();	判斷子串是否存在
		str.indexOf();	指定位置查找子串或查到子串返回其
		str.startsWith();	判斷是否以指定字符串開頭
		str.endswith();		判斷是否以指定字符串結尾
		str.replaceAll();	替換所有內容
		str.replaceFirst();	替換首個內容
		str.spilit();	字符串拆分,注意拆分符的轉義
		str.substring();	字符串截取
		str.trim();		字符串去掉左右空格
		str.toUpperCase();	全部轉大寫
		str.toLowerCase();	全部轉小寫
		str.isEmpth();		字符串判空
	StringBuffer類:
		和String類都是“CharSequence”接口的子類,此接口描述一系列字符集。
		互相轉換:
			String->SB:利用StringBuffer的構造方法或append()
			SB->String:調用toString()方法
		方法:
			sb.reverse();	字符串反轉
			sb.delete();	字符串刪除
			sb.insert();	字符串插入
	*面試題:String與StringBuffer、StringBuilder區別
		1.String內容不可改,兩隻SB可改;
		2.SBuffer採用同步處理,線程安全;SBuilder採用異步處理,不安全。
2 Object類
	Java中其他所有類默認繼承Object類;所有類對象可用Object接收。
	若使用對象直接輸出時,默認是一個地址編碼,比如數組;
	若現在使用String類,該類對象直接輸出就調用toString()方法。
	Object類的toString()核心在於取得對象信息。
	Object達到參數統一,一個類希望接收所有的數據類型可以實現。
3 包裝類
	就是將基本數據類型封裝到類中。
	使用:
		對象型(Object的直接子類):Boolean、Character(cahr)
		數值型(Number的直接子類):Byte Double Short Long Integer Float
		說明:
			Number類的定義:public abstract class Number implements java.io.Serializable
			在Number類中實際定義有六種重要方法
	裝箱與拆箱:
		包裝類與基本數據類型之間:
		裝箱:將基本型變爲包裝類對象,利用每一個包裝類提供的構造方法實現裝箱處理。
		拆箱:將包裝類中包裝的基本數據類型取出,利用Number類中提供的六種方法。
		JDK1.5之後提供自動拆裝箱處理,則可直接利用包裝類對象操作。
		阿里規範:相同類型的包裝類對象之間值比較全部用equals方法。
	類型互換:
		字符串->基本數據類型:
		int num = Integer.parseInt(str);
		基本數據類型->字符串:
			1.任何類型使用“+”連接空白字符
			2.使用String類的valueOf(),此方法不產生垃圾

實現對象比較:

class Person{
	private String name ;
	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("Hannah", 20) ;
		Person per2 = new Person("Sarah", 18) ;
		System.out.println(per1.equals(per2));
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章