形参是基本数据类型
当形参是基本数据类型时传递的是参数值,对形参进行修改操作并不会影响到函数外传递进来的原值。
测试代码如下:
package test;
public class test {
public static void main(String[] args) {
int a=1;
System.out.println(a);
change(a);
System.out.println(a);
}
public static void change(int a) {
a=4;
System.out.println(a);
}
}
运行结果为:
1
4
1
当形参是引用数据类型的时候传递的是地址,对形参进行修改会直接修改形参指向的地址的内容。
测试代码如下:
package test;
public class test {
public static void main(String[] args) {
int[] a= {1,2,3};
for (int i : a) {
System.out.print(i);
}
change(a);
System.out.println();
for (int i : a) {
System.out.print(i);
}
}
public static void change(int[] a) {
a[2]=4;
System.out.println();
for (int i : a) {
System.out.print(i);
}
}
}
运行结果如下:
123
124
124
当形参是String类型变量
当String类型变量作为形参是,传递的的确是地址,但是String类型的变量指向的地址内容是不可变字符串,因此不管对形参怎么进行操作也不会影响main方法内的值。函数内的a发生了改变其实是地址发生了改变,导致值发生了改变。因为String类型的值都存储在常量池中,只要出现了新的值就会直接再产生一个字符串对象来存储新的值。
测试代码如下:
package test;
public class test {
public static void main(String[] args) {
String a="qqq";
System.out.println(a);
change(a);
System.out.println(a);
}
public static void change(String a) {
a+="www";
System.out.println(a);
}
}
运行结果为:
qqq
qqqwww
qqq