String 的特点:
长度一旦定义了,就不可以改变,即使改变也是重新new的
举例:
public class Test {
public static void stringReplace(String text) {
text = text.replace('j', 'i');
System.out.println("新的对象:" + text);
}
public static String stringReplace2(String text) {
return new String(text);
}
public static void main(String args[]) {
String s1 = "a";
String s2 = "a";
System.out.println("s1== s2: " +(s1 == s2));
System.out.println("s1.equals(s2) " + s1.equals(s2));
String news1 = new String("a");
String news2 = new String("a");
System.out.println("news1.equals(news2): " + news1.equals(news2));
System.out.println("news1 == news2: " + (news1 == news2));
/**
只要重新new过,即使值相同,地址也不同
*/
String textString = new String("java");
stringReplace(textString);
System.out.println(textString);
/**
* 结果:java
* 说明:传过去的值被改变成了iava,意思是在内存区域(堆)中重新new
* 了一块,值是“iava”,在stringReplace()中,是textString的引用赋给了text,指向了
“iava”,但是一旦方法执行完毕
* 局部变量text也就消失,在打印textString时,还是指向原来的“java”区域。
*/
结果:s1== s2: true
s1.equals(s2) :true
news1.equals(news2): true
news1 == news2: false
新的对象:iava
java