package Practice;
// *****参数的传递问题****
// 1.按值传递
// 基本类的方法做参数******** 直接将参数值传递给方法 ***eg:meth1
// 2.引用调用传递
// 对象作为方法的参数传递***** 将参数通过引用调用(不是参数值)传递给方法 ***eg:meth2
// 对象的类找参数传递
class Test1 {
void meth1(int i, int j)//此处将基本类型值作为方法的参数
{
i *= 2;
j /= 2;
}
}
class Test2{
int a,b;
Test2(int i,int j)//类的构造方法
{
a = i;
b = j;
}
// 创建一个Test2的类的变量o作为方法的参数
void meth2(Test2 o)//此处将对象作为方法的参数
{
o.a *= 2;
o.b /= 2;
}
}
public class Parameters {
public static void main(String[] args)
{
Test1 ob1 = new Test1();
Test2 ob2 = new Test2(10,20);
int a = 10,b = 20;//此处声明a 和b的值
System.out.println("基本类做参数,参数值被传递+a and b befor call:"+ a + " " + b);//传递前a=10,b=20
System.out.println("对象做参数,引用参数被传递a and b befor call:"+ ob2.a + " " + ob2.b);//传递前a=10,b=20
// 前面定义过a和b,他两有固定的值。
// 虽然a和b在该方法(meth1)中值被改变了;但是在输出时还是输出方法外的值(之前定义的值)
// 基本类作为方法参数时,值在后面被方法调用时,不受方法内的程序影响,即为按值传递
ob1.meth1(a,b);
// 此处的方法中的参数为一个对象,对象中本身有两个属性a,b
// 当有参数传进来时,会依次将传入的参数赋给两个属性,从而使对象的内部参数改变
ob2.meth2(ob2);//对象通过引用参数来传递
System.out.println("a and b after call:"+ a +" " + b);//传递后a=10,b=20
System.out.println("a and b after call:"+ ob2.a +" " + ob2.b);//传递后a=20,b=10
}
}
总结:java中参数的传递
1.当基本类型作为方法中的参数时,传入的参数,只在方法中的程序起作用,离开方法后,本身的值不改变。(按值传递)
2.当对象作为方法中的参数时,传入的对象参数,在对象内部也起作用,使他在方法外的值也被改变。(对象引用调用传递)