1. == 和 equals 方法的區別 ,這是面試必問的問題
"=="比較的是引用(是否指向同一個內存塊),“equals”比較的是具體的內容
String name1="張三" //直接賦值方式
String name2=new String("張三"); //new對象方式
String name3=name2 ; //傳遞引用
name1==name2 false
name1==name3 false
name2==name3 true
name1.equals(name2) true
name1.equals(name3) true
name2.equals(name3) true
原理:由於常量池不存在兩個相同的對象,所以name2和name3都指向JVM字符串常量池中"張三" 對象。
而new關鍵字一定會產生一個對象,並且這個對象是存放在堆中的,所以String name2=new String("張三");
產生兩個對象,保存在棧中的name2和保存在堆中的張三,
注意事項: object 的equals方法容易拋空指針異常,應該是用常量或是確定有值的對象調用equals
2.String 兩種實列化方式區別
直接賦值方式:創建的對象放在字符串對象池裏,如果存在就不創建
new對象方式:每次都創建新的對象
String實例的值是通過字符數組實現字符串存儲的。
3.字符串特性:
不能改變字符串的內容,要想改變,只能通過指向一個新的內存地址。因爲在源碼中其是非final修飾的,意味着其不能
被繼承,並且其成員value也是final,因此字符串一旦創立就不能修改。
4.String常見的方法:
4.1 charAt :返回指定索引處的char值,索引範圍爲0-----length()-1
String name="張三"
char ming =name.charAt(1)
4.2 length():返回字符串的長度
4.3 indexof:返回指定字符串在此字符串中第一次出現的處的索引
String str="sadasd";
str.indexof("d");
4.4 substring(int beginIndex int endIndex)
返回一個新字符串,該字符串從指定的beginIndex處開始,直達索引endIndex -1處的字符,其長度爲endIndex-beginIndex
包含起始字符,不包含結束字符
String str1="不開心每一天,不可能"
str.substring(1,6)
結果:開心每一天
4.5 toUpperCase() :全變成大寫
tolowercase(): 全變成小寫
4.6 Trim():去掉字符串前後空格
5."+"連接符解析
其原理是通過StringBuilder以及append方法實現的,在實際代碼編程中,使用+和使用StringBuilder以及append方法
來拼接字符串對象是等價的。
注意:如果大量StringBuilder創建在堆內存中,必然會造成效率的損失,所以這種情況下建議在循環體外創建
一個StringBuilder對象調用append方法手動拼接
6 問題 題統計newStr中出現的英文字符 空格 其他的個數
String str ="asdaf ddcxzcsd2312”
int kongge=0
int yingwen=0
int qita=0;
for(int i=0; i<newStr.length();i++){
char c=newStr.charAt(i);
if(( c>= ‘a’&&c<'z‘)||( c>= ‘A’&&c<'Z‘){
yingwen++}
else if(c== ‘’ ”){
kongge++
} else{
qita++
}
}