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),会去常量池查找是否已存在,存在就不会开辟新空间:
为了更好的说明实例化对象的区别,一下还有一段简单代码示例,一样可以参考上图。
//对象比较
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