引用传递(pass by reference)是指在调用方法时将实际参数的地址直接传递到方法中,在方法中对参数所进行的修改,将影响到实际参数。
值传递(pass by value)是指在调用方法时将实际参数拷贝一份传递到方法中,在方法中对参数修改,不会影响到实际参数。
基本类型传的是值的拷贝,对拷贝变量的修改不影响原变量,当传的是引用类型时,传的是引用地址的拷贝,但是拷贝的地址和真实地址指向的都是同一个真实数据,可以修改原变量中的值,当传的是String类型时,虽然拷贝的也是引用地址,指向的是同一个数据,但是String的值不能被修改。
String c= new String("abc");
在java heap中创建了“abc”,然后调用String的构造函数
public String(String original) {this.value = original.value;this.hash = original.hash;}
在构造函数中,String将底层的字符串数组赋值给value。Array的赋值只是引用的赋值,所以上述new操作并不会产生新的字符串字面值。但是new操作新创建了一个String对象,并将其赋值给了c。String的不可变性还在于,String的所有操作都会产生新的字符串字面量。原来的字符串是永远不会变化的。字符串不变的好处就在于,它是线程安全的。任何线程都可以很安全的读取字符串。