下面来看几个例子:
1. String s1 = "hello";
String s2 = "hello";
String s3 = new String(s1);
System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
第一个输出为true,因为"hello"可以看作是String类的一个实例对象,而s1,s2都是它的引用。
第二个输出为false,因为new出来的,引用不再指向原来的地方。
2. String str = "hello";
changeStr(str);//调用changeStr()方法想要把str修改为hi
System.out.println(str);//结果为hello,并没有变成hi
......
public static void changeStr(String str){
str = "hi";
}
形参类型无非两种一种为基本类型也就是传的是值,另一种是句柄类型,java里面传的是引用。但String类型不是基本类型啊,对它本来传的是引用,但是参考String 类型源码的实现:
public String replace(char old,char new) {
.......
if (i < len) {
char buf[] = new char[len];//对,没错它是在成员方法的局部空间内new出来的,
构造的是一个String的char序列的副本,改变的是形参
因此针对原来的String对象来说并没有发生改变
}
参考资料博客:https://bbs.csdn.net/topics/60040580