1、在方法体内对参数进行运算,不会影响原有变量的值(基本类型不会改变值,引用类型不会改变引用
地址)。
public class ParamTest {
public static void integerParam(int a,int b){
a += 1;
b += 1;
}
public static void quoteParam(Random x){
x = new Random();
}
public static void main(String[] args) {
int a = 1;
int b = 2;
integerParam(1,2);
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("=======我是分割线======");
Random r = new Random();
System.out.println(r);
quoteParam(r);
System.out.println(r);
}
}
输出结果:a:1
b:2
=======我是分割线======
java.util.Random@5910e440
java.util.Random@5910e440
2、在方法体内对参数的属性进行操作,将改变原有变量的属性值(如集合、数组中的元素)
public class ParamTest {
public static void integerParam(int a,int b){
a += 1;
b += 1;
}
public static void quoteParam(Random x){
x = new Random();
}
public static void arrayParam(String[] strArray){
strArray[0] = "a";
strArray[1] = "b";
}
public static void main(String[] args) {
int a = 1;
int b = 2;
integerParam(1,2);
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("=======我是分割线======");
Random r = new Random();
System.out.println(r);
quoteParam(r);
System.out.println(r);
System.out.println("========我是分割线=========");
String[] strArray = new String[2];
strArray[0] = "x";
System.out.println(strArray);
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
arrayParam(strArray);
System.out.println(strArray);
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
}
输出结果:
a:1
b:2
=======我是分割线======
java.util.Random@5910e440
java.util.Random@5910e440
========我是分割线=========
[Ljava.lang.String;@6267c3bb
x
null
[Ljava.lang.String;@6267c3bb
a
b
我们可以看到在最下边数组参数的测试结果中,参数的引用地址没有发生变化,而参数内部的元素发生了变化。