方法的参数传递
c1 c2 引用 引用 c1 c2 c: Circle radius=9 引用 引用
c: Circle radius=5
关于引用和对象的一种通俗的解释:
引用和对象的关系,可以想象成电视遥控板(引用)和电视 机(对象)的关系。只要握住这个遥控板,就相当于掌握了 与电视机连接的通道。一旦需要“换频道”或者“关小声 音”,我们实际操纵的是遥控板(引用),再由遥控板自己 操纵电视机(对象)。如果要在房间里四处走走,并想保持 对电视机的控制,那么手上拿着的是遥控板,而非电视机。 此外,即使没有电视机,遥控板亦可独立存在。也就是说, 只是由于拥有一个引用,并不表示必须有一个对象同它连接。 可创建一个Circle引用: Circle c; 但这里创建的只是引用,并不是对象。这里c实际并未与任 何东西连接(即“没有电视机”)。 c=new Circle(); 这样c引用和一个圆对象相连接。(遥控板和电视机连接)
参数按值传递
//交换n1、n2的数值;如n1等于1,n2等于2, //执行该方法,n1等于2,n2等于1 static void swap(int n1, int n2) { ①变量temp等于n1的数值 int temp = n1; ②n1等于n2的数值 n1 = n2; n2 = temp; } ③n2等于temp的数值,因为temp等于n1的数
值,所以n2也就等于n1的数值
参数按值传递
public class TestPassByValue{ public static void main(String[ ] args) { int num1 = 1; int num2 = 2; swap(num1, num2); System.out.println(“num1等于” + num1+ “ num2等于" + num2); } static void swap(int n1, int n2){ int temp = n1; n1 = n2; 交换n1和n2的数值 n2 = temp; System.out.println(“ n1等于” + n1+ “ n2 等于" + n2); } 输出n1的数值等于2,n2的数值等于1 }
方法的参数传递
参数传递
参数传递分两种类型: ①参数按值传递 ②参数按引用传递
参数按值传递-参数类型?
class TestMax { public static void main(String[ ] args){ int i = 5; i和j是实际参数,简称实参 int j = 2; int num3 = max(i, j); System.out.println("The maximum is " + num3); } static int max(int num1, int num2){ if (num1 > num2) return num1; num1和num2是形 else 式参数,简称形参 return num2; } }
调用swap方法后, num1的还是等于1, num2的还是等于2, swap的执行对num1和 num2的数值没有影响
实参的内容没有交换
swap(num1,num2) num1 num2 按值传递 1 2 num1 num2 交换 n1 n2 1 2 n1 n2 temp 2 1 2
swap(n1, n2)
• 假设有一个盒子类Box,定义如下: public class Box { String color;
Box(String color){ this.color=color; }
public String toString(){ return color; } }
以引用类型作为参数
public class TestBox { static void changeColor(Box b1){ b1.color="green"; } public static void main(String[] args) { Box redBox=new Box("red"); System.out.println("红盒子是"+redBox.color+"色的。"); changeColor(redBox); System.out.println("红盒子是"+redBox.color+"色的。"); } } 调用了changeColor方法后,盒子的属性color被改变。
简单类型 int i =1 i
1
对象类型 Circle c = new Circle(5) c 引用
c: Circle radius=5
简单类型变量和对象类型变量的区别
变量赋值 简单类型变量,一个变量的真实值赋给另一个变量。 对于对象类型变量,一个变量的引用赋给另一个变量。 对象类型赋值 c1=c2 赋参数的方法时,参数的值复制到方法中称为 按值传递(pass by value)。
• 无论方法中的形参怎么变化,实参并不会 改变!!这是参数按值传递的最大特色!
• 我们看一个例子TestPassByValue.java,它包含一 个static void swap(int n1, int n2)方法,该方法的 功能是交换数字n1和数字n2的数值。
1
1
执行方法swap
参数的引用传递
• 当一个方法的参数是对象或数组时,我们称这 种传递方式为引用传递。 • 那么,什么是引用呢?
简单类型与引用(对象)类型
对简单类型变量来说,对应内存所存储的值是简 单类型的数值。 对引用类型的变量来说,它的值是一个引用,是 对象的存储地址。Java中的对象和数组都属于 引用类型。
给方法传递对象
传递简单类型的变量和传递对象有重要区别
传递简单类型变量就是将其值传递给形参。改变 方法内部的参数不会影响方法外部的变量值。 这种传递称为值传递。
传递对象意味将对象的引用传递给形参。方法体 内的局部对象的任何变化都会影响作为参数传 递的原对象。这种传递称为引用传递。
以引用类型作为参数