参数传递的一些知识,不全面部分望指点。
call by value: 按值传递
call by reference: 按引用传递
特点:
call by value。 不改变值,即操作的是一个值的拷贝,所以原值不变。
call by reference 改变值,但是不改变实际参数的参考地址。可以理解为将另一个引用也指向同一个对象。
代码:
public static void st(String str){
// System.out.println(str.hashCode());
str = str.replace("1","2");
// System.out.println(str.hashCode());
}
public static void st1(StringBuffer stringBuffer){
stringBuffer.append("S");
stringBuffer = new StringBuffer("567");
stringBuffer.append("890");
}
public static void main(String...args){
String s = "123";
st(s);
System.out.println(s);
System.out.println(s.hashCode(););
StringBuffer str1 = new StringBuffer("sss");
System.out.println(str1);
st1(str1);
System.out.println(str1);
}
输出结果:
48690
49651
123
48690
sss
sssS
String类的replace,返回的是一个新的String对象,然后将str这个引用指向了新的对象。在st1方法中,StringBuffer的append();方法操作的是原对象的值,而且返回的是原对象。
stringBuffer =
new
StringBuffer(
"567"
);而这句则将引用stringBuffer指向了新的对象。