参数传递:Java中方法的参数传递都为传值调用
【基本数据类型】
public class Test {
public static void leftshift(int i, int j){
i+=j;
}
public static void main(String args[]){
int i = 4, j = 2;
leftshift(i, j);
System.out.println(i);
System.out.println(j);
}
}
int i = 4, j = 2;
基本数据类型的参数传递(实参的值传递给形参)——即把4和2传递给方法leftshift中的形参i、j,实参无变化。
class Test11{
int i;
public int show(int i) {
return ++i;
}
}
public class TestPerson{
public static void main(String[] args) {
int num=10;
Test1 a=new Test1();
System.out.println(a.show(num)); //11
System.out.println(num); //10
}
}
【引用数据类型】
public class Demo
{
public static void modify(int[] a)
{
a[0]++;
}
public static void main(String[] args)
{
int[] a=new int[1];
modify(a);
System.out.println(a[0]); //
}
}
引用数据类型的参数传递(实参的值传递给形参)——即把数组a在堆中的地址传递给形参,在方法中赋值,改变了堆中数组a[0]的值。
public class TestA {
int i ;
void change(int i){
i++;
System.out.println(i); //所以值为1
}
void change1(TestA t){ // 形参为对象引用类型,对对象的实际值进行操作,那么也将改变返回的实参的值
t.i++;
System.out.println(t.i); //值为1
}
public static void main(String[] args) {
TestA ta = new TestA();
System.out.println(ta.i); //i为int类型的成员变量,默认值为0,
ta.change(ta.i); //只是单纯的将int类型的值作为实参传递给了形参
System.out.println(ta.i); //基本类型传递不改变实参的值
ta.change1(ta); //这里将对象传递给了形参,对象属于引用类型
System.out.println(ta.i); //实参被改变,值为1
}
}
0
1
0
1
1
原因:如上。