参数传值
方法中最重要的部分就是方法的参数,参数属于局部变量,当对象调用方法时,参数即被分配内存空间,并要求调用者向参数传递值。即方法被调用时,参数变量必须有具体的值。
1.传值机制
在Java中,方法的所有参数都是“传值”的,即 方法中参数变量的值是调用者指定的值的复制。
比如说,如果向方法的int型参数x传递一个int值,那么参数x得到的值就是传递的值的复制。因为传递的是值的复制,那么方法改变参数的值的话,并不影响向参数“传值”的变量的值。
举个例子,我向你通过邮箱发送一个我的本地文档,你收到邮件后,对文档进行了更改。但是你的更改并不会影响到我的文档。
2.基本数据类型参数的传值
我们在了解这个之前,先来看一下Java基本数据类型的级别。
下列是Java基本数据类型从低到高的排列。
byte---short---char---int---long---float---double
注意:String不是基本类型。
在Java基本数据类型的传值中,向该参数传递的值的级别要小于等于该参数的级别,比如不可以向int型参数传递一个long值,但是可以向float型参数传递一个long值。
示例代码
public class jiafa() {
int add(int x,int y) {
return x+y;
}
}
public class lizi{
public static void main(String args[]) {
jiafa jia = new jiafa();
int m=20;
int n=10;
int result = jia.add(m,n);//将m,n的值“传值”给x,y
System.out.println(result);
result = jia.add(10+m,n*2);//将10+m,n*2表达式的值“传值”给x,y
System.out.println(result);
}
}
3.引用类型参数的传值
Java的引用型参数包括 数组,对象,接口。 当参数引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体。 注意一下,对于两个相同类型的引用型变量,如果有同样的引用,就会用同样的实体。因此,如果改变参数变量引用的实体,就会导致原变量的实体发生同样的变化。
但是,改变参数中存放的“引用”不会影响向其传值的变量中存放的“引用”。
You.java
public class You{
int youcount;
you(int count){
youcount = count;
}
}
car.java
public class Car{
void onCar(You you){
you.youcount=you.youcount-5;//开车消耗了油
}
}
public class lizi{
public static void main(String args[]){
You qiyou = new You();//创建油对象
System.out.println("汽车还有这么多油"+qiyou.youcount);
Car car = new Car();//创建汽车对象
System.out.println("汽车开始消耗汽油");
car.onCar(qiyou);
System.out.println("目前汽车还剩的油量为"+car.youcount);
}
}
Car类创建的“汽车”对象调用onCar(You you)方法时,将You类创建的“汽油”对象传递给该方法的参数you,就是模拟汽车使用汽油。
在主类中将You类创建的“油”对象qiyou传递给onCar(You you)方法的参数you,该方法消耗了you的油量,那么qiyou的油量就会同样发生变化。
暂时只写了参数传值的这部分。