基本类型:按值传递参数值,对副本的改变并不改变原来值;
对象:按值传递对象引用(object reference),对副本的改变有可能会改变原有值。注意:传递的对象引用,而不是对象。即传递的是对象引用副本,而不是对象副本。
按值传递对象引用是这样:
一段代码:
/** */
/**
* 按值传递对象引用
* @author Jessica
*/
public class PassByValue3 ... {
public static void main(String[] args) ...{
StringBuffer sb1, sb2;
//初始化
sb1 = new StringBuffer("hello");
sb2 = new StringBuffer("jessica");
//输出修改前的值
System.out.println("/before set value/");
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
//输出修改中的值
System.out.println("/setting value/");
PassByValue3.modify(sb1, sb2);
//输出修改后的值
System.out.println("/after set value/");
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
}
/** *//**
* 按值传递对象引用,即传递对象引用的副本
* @param str1 str1对象引用,java以by value方式传递str1对象引用
* @param str2 str2对象引用,java以by value方式传递str2对象引用
*/
public static void modify(StringBuffer str1, StringBuffer str2)...{
str1 = new StringBuffer("hi");
str2 = str2.append(",how are you?");
System.out.println("str1:"+str1);
System.out.println("str2:"+str2);
}
}
* 按值传递对象引用
* @author Jessica
*/
public class PassByValue3 ... {
public static void main(String[] args) ...{
StringBuffer sb1, sb2;
//初始化
sb1 = new StringBuffer("hello");
sb2 = new StringBuffer("jessica");
//输出修改前的值
System.out.println("/before set value/");
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
//输出修改中的值
System.out.println("/setting value/");
PassByValue3.modify(sb1, sb2);
//输出修改后的值
System.out.println("/after set value/");
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
}
/** *//**
* 按值传递对象引用,即传递对象引用的副本
* @param str1 str1对象引用,java以by value方式传递str1对象引用
* @param str2 str2对象引用,java以by value方式传递str2对象引用
*/
public static void modify(StringBuffer str1, StringBuffer str2)...{
str1 = new StringBuffer("hi");
str2 = str2.append(",how are you?");
System.out.println("str1:"+str1);
System.out.println("str2:"+str2);
}
}