内容稍多,可直接看第4点的讨论结果
前言
在涉及到传递参数给方法时,容易出现一些参数传递错误的问题,这就涉及到了参数的传递问题,必须搞清楚:参数是如何传递到方法中的?一般来说,参数的传递可以分为两种:值传递和引用传递。
所谓值传递,就是方法中的形参获得的是实参的值,而引用传递,就是说方法中的形参获得的是实参的引用(地址)。
参数的传递其实类似于一个赋值操作,所以接下来,先讨论值和地址的问题,再讨论赋值操作,最后才进行参数传递的讨论。
1.基本概念
首先要搞清楚一个概念,即:变量中储存的内容是什么。
变量类型分为基本数据类型和引用类型:
基本数据类型的变量直接存储的是变量的值,如int i=10; i中存储的为变量的值。
引用类型的变量存储的则是实际对象的地址,如Dog myDog = new Dog(); myDog中存储的仅仅是地址(也可以称为引用)。
2.赋值操作
需要明确赋值操作的含义。
赋值操作“=”包含两个意思:1.放弃了原有的值或引用;2.得到了 = 右侧变量的值或引用。
基本类型:= 操作代表完整复制了变量的值。例如:int a=b; a仅获取了b的值,两者在此之后并无任何关系。
引用类型:= 操作代表复制了变量的引用。 例如:Dog aDog=bDog; aDog复制了bDog的引用,两个变量都指向同一个Dog对象。
一个简单的例子:
public class Test {
public static void main(String[] args) {
int x=10;
int y=x;
x=20;
System.out.println("x:"+x);
System.out.println("y:"+y);
Dog aDog=new Dog();
aDog.name="阿黄";
aDog.age=1;
Dog bDog=aDog;
aDog.name="旺财";//改变aDog的名字
bDog.age=2;//改变bDog的年龄
System.out.println("aDog:"+aDog.name+","+aDog.age);
System.out.println("bDog:"+bDog.name+","+bDog.age);
}
}
class Dog {
String name;
int age;
}
x:20 y:10 aDog:旺财,2 bDog:旺财,2