黄阶低级 - 《 Java 核心》- 4.5 方法参数 - 修改0次
2016-08-17 22:41
363 查看
方法参数
打个比方,值调用是克隆人,和母体本人无关;引用调用是本人的地址,可以找到本人,改变本人1、调用基本类型
一个方法不能修改一个基本数据类型的参数,例如我们定义一个方法如下:public static double threeMul(double x) { return 3 * x; }
然后调用这个方法:
double d = 100.0; threeMul(d); System.out.println(d);//输出 100.0 System.out.println(threeMul(d));// 输出300.0
说明方法 threeMul 无法改变 d 的值;具体执行过程是 x 被初始化为 d 值得一个拷贝,也就是 100.0,接着返回 300.0,但是 d 仍然是100.0,方法结束之后,参数变量 x 不再使用。
2、调用引用类型
方法参数的类型有两种,基本数据类型和对象引用,一个方法可以修改一个对象引用的状态,因为对象引用及其他的拷贝同时引用同一个对象。例如:
我们设计一个简单的 Employee 类:
class Employee { private int id; //只有 id 一个属性 public Employee(int id) { this.id = id; } public double getId() { return id;//基本数据类型没有克隆 clone } public void setId(int id) { this.id = id; } }
和一个方法:
public static void raiseId(Employee x) { x.setId( 8b86 x.id + 10); }
调用结果:
public static void main(String[] args) { Employee a = new Employee(100); raiseId(a); System.out.println(a.id);// 输出 110 }
3、Java 调用类型
注意: Java 程序设计语言总是采用值调用,不使用引用调用,也决定了一个方法不能让对象参数引用一个新的对象我们来设计一个反例:
写一个尝试更换两个对象的方法:
public static void swap(Employee x, Employee y) { Employee temp = x; x = y; y = temp; }
如果可以成功,下面应该可以实现交换数据:
public static void main(String[] args) { Employee a = new Employee(100); Employee b = new Employee(200); swap(a, b); System.out.println(a.id);//输出 100 System.out.println(b.id);//输出 200 }
可见 swap 方法的参数 x 和 y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝, x 和 y 的确交换了对象参数然而结果没有保留下来。
相关文章推荐
- 黄阶低级 - 《 Java 核心》- 4.4 静态域和静态方法 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.0 对象和类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.1 第一个java程序 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.5 运算符 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.6 对象构造 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.2 使用预定义类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.2 注释 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.8 控制流程 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.1 对象和类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.7 包 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.3 用户自定义类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.9 大数值 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.5 运算符(二)- 修改0次
- 黄阶低级 - 《 Java 核心》- 3.10 数组 - 修改0次
- 黄阶低级 - 《 Java 核心》- 4.8 类路径 - 修改0次
- 黄阶低级 - 《 Java 核心》- 5.2 Object 类,所有的类的超类 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.7 输入输出 - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.6 字符串 - 修改0次
- 黄阶低级 - 《 Java 核心》- 5.1 类、超类和子类(二) - 修改0次
- 黄阶低级 - 《 Java 核心》- 3.3 数据类型 - 修改1次