在C语言中,参数的传递分为值传递和地址传递
在Java中参数的传递就是值传递
1.基本类型的传递,基本类型存放在栈中,int a的值传递给变量int a1,a1的值发生改变不会影响a
2.引用类型的传递,
字符串的传递:.字符串str的内容为hello,存放在堆内存中,把str传递给String str1后,(String str相当于在栈内存中定义了未初始化的str)str1中的内容为hello,str=str1="hello",如果改变str1的值,那么str1就会重新开辟一个空间,(直接赋值法会自动开辟空间(如果对象池中没有该内容))并指向其空间,所以字符串的传递不会改变值,常识:字符串是不可更改的
补充:如果new String("word") 一个新对象str2,"word"是匿名对象,自动存放在堆空间中,每new一个对象就相当于开辟了一个堆内存,str2指向该堆空间,可以看到,产生了word垃圾,所以字符串一般都采用直接赋值法
数组的传递:将数组a传递到数组b中,数组b也指向了相同的堆空间,改变数组b中的内容,数组a也发生了改变
public class TestParameter{
public static void main(String[] args){
int int_a=2;
String str="hello";
String str2=new String("word");
int[] a=new int[]{1,2,3};
paraTrans(int_a,str,a);
System.out.println("整数int_a="+int_a); //实参整数int_a
System.out.println("字符串str="+str); //实参字符串str
System.out.println("字符串str2="+str2); //补充说明的str2
for(int i=0;i<a.length;i++){
System.out.print("a["+i+"]="+a[i]+"\t"); //参数数组b
}
}
public static void paraTrans(int int_b,String str1,int[] b){
int_b=3;
str1="word";
b[0]=5;
}
}