* 参数传递分为:
*
* 按值调用:方法接收的是调用者提供的值。
* 按引用调用:方法接收的是调用者提供的变量地址。
* Java采用的总是按值调用。也就是说,方法得到的是所有参数值的拷贝,特别的,方法不能修改传递给它的任何参数变量的值。因为在方法结束之后,拷贝不再使用,被放弃。改变拷贝的值不能改变原始参数变量的值。
* 方法参数有两种类型:
*
* 基本数据类型(数值,布尔)
* 引用类型(也是变量,变量的值为引用),当参数类型为引用类型时,方法得到的是对象引用的拷贝,此时参数及其拷贝指向的是同一个对象,可以通过对象引用的拷贝实现对对象内容的修改。
* Java方法参数的使用情况:
*
* 一个方法不能修改基本数据类型的参数的值(数值型或布尔型)
* 一个方法可以改变对象参数的状态(即对象的内容)
* 一个方法不能让对象参数引用新的对象
package test;
import org.junit.After;
class Test{
public int number;
public Test(int number) {
super();
this.number = number;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
public class Param {
//当参数为基本数据类型时,不能修改其值
public static void increase(int a){
a=2*a;
}
public static void swap_1(int a,int b){
int temp=a;
a=b;
b=temp;
}
//当参数为引用类型时,可以修改对象的内容
public static void changeTest(Test t){
t.number=t.number+2;
}
//当参数为引用类型时,不能让参数指向新的对象
public static void swap(Test a,Test b){
Test c=a;
a=b;
b=c;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=10;
System.out.println(a);
increase(a);
System.out.println("after execute increase(int a) :"+a);
int b=4;int c=5;
swap_1(b, c);
System.out.println(b+" "+c);
Test aTest=new Test(1);
Test bTest=new Test(2);
System.out.println(aTest.number);
changeTest(aTest);
System.out.println("after execute changeTest(Test t)"+aTest.number);
System.out.println(aTest.number+" "+bTest.number);
//方法并没有改变存储在aTest,bTest中对象的引用
//在方法结束之后拷贝被丢弃,原来的变量仍指向原来的对象
swap(aTest, bTest);
System.out.println("after execute swap(Test a,Test b) :"+aTest.number+" "+bTest.number);
}
}