getChars() :
void getChars(int start, int end, char target[ ], int targetStart);
獲取從start到end-1為字符,放到target[]字符數組的targetStart開始中。
示例:
//字符截取
public void Show3(){
String str="is good right?";
char b[]=new char[16];
b[0]='m';
b[1]='a';
b[2]='x';
b[3]=' ';
b[4]='-';
//str.getChars(0,7,b,5);
str.getChars(0,7,b,4);
System.out.println(b);
}
//運行結果:
max is good
Process finished with exit code 0
equals()和==:
String.equals(),比較兩個字符串是否相等,String類對equals()的定義主要還是對其值的比較,相等就為true。而“==”則是對引用地址的比較,下面是一段代碼示例:
//字符串比較
public void Show4(){
String s1="aa";//
String s2="aa";
String s3=new String("aa");
String s4=new String("aa");
String s5=s4;
System.out.println("s1 equals s2 -> "+s1.equals(s2));
System.out.println("s1 == s2 -> "+(s1==s2));
System.out.println("s3 equals s4 -> "+s3.equals(s4));
System.out.println("s3 == s4 -> "+(s3==s4));
System.out.println("s4 == s5 -> "+(s4==s5));
}
//運行結果:
s1 equals s2 -> true
s1 == s2 -> true
s3 equals s4 -> true
s3 == s4 -> false
s4 == s5 -> true
Process finished with exit code 0
這里面涉及java String賦值的原理。以上代碼在聲明的時候會對應的指向對應區域如下圖所示。
注意 直接賦值(s1,s2),會去常量池查找是否已存在,存在就不會開辟新空間:
equals實例.jpg
為了更好的說明實例化對象的區別,一下還有一段簡單代碼示例,一樣可以參考上圖。
//對象比較
public void Show5(){
Temp s3=new Temp("aa");
Temp s4=new Temp("aa");
Temp s5=s4;
System.out.println(s3 + " equals " + s4 + " -> " + s3.equals(s4));
System.out.println(s3+" == "+s4+" -> "+(s3==s4));
System.out.println(s4+" == "+s5+" -> "+(s4==s5));
}
public class Temp{
private String value;
public Temp(String value){
value=value;
}
public String getValue(){
return value;
}
public void setValue(String value){
value=value;
}
public String toString(){
return getClass().getSimpleName()+"@"+Integer.toHexString(hashCode());
}
//運行結果
Temp@74a14482 equals Temp@1540e19d -> false
Temp@74a14482 == Temp@1540e19d -> false
Temp@1540e19d == Temp@1540e19d -> true
Process finished with exit code 0