概念部分
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 ;
}
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) ) ;
}
}