Java方法参数传递机制 |
您所在的位置:网站首页 › java参数传递方式只有一种 › Java方法参数传递机制 |
Java里方法的参数传递只有一种:值传递。就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。
1、基本类型参数传递 public class valueTransmit { public static void main(String[] args) { int a = 6; int b = 9; System.out.println("交换前,a的值是:" + a + "; b的值是:" + b); swap(a, b); System.out.println("交换结束后,a的值是:" + a + "; b的值是:" + b); } public static void swap(int a, int b) { int temp = a; a = b; b = temp; System.out.println("swap方法里,a的值是:" + a + "; b的值是:" + b); } }运行结果: 交换前,a的值是:6; b的值是:9 swap方法里,a的值是:9; b的值是:6 交换结束后,a的值是:6; b的值是:9从运行结果得到:swap()方法的a和b只是main()方法里变量a和b的复制品。程序改变的是swap方法栈区中的a、b,mian()方法栈区中的a、b都没有改变。
2、引用类型的参数传递:一样采用的是值传递方式 public static void main(String[] args) { Student student = new Student(); student.high = 6; student.age = 9; System.out.println("交换前,high的值是:" + student.high + "; age的值是:" + student.age); swap(student); // swap方法里把student赋值为null,main方法的student变量不受影响 System.out.println("交换后,high的值是:" + student.high + "; age的值是:" + student.age); } public static void swap(Student student) { int temp = student.age; student.age = student.high; student.high = temp; System.out.println("swap方法里,high的值是:" + student.high + "; age的值是:" + student.age); student = null; } static class Student { private int high; private int age; public int getHigh() { return high; } public void setHigh(int high) { this.high = high; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }输出结果: 交换前,high的值是:6; age的值是:9 swap方法里,high的值是:9; age的值是:6 交换后,high的值是:9; age的值是:6乍看输出结果,当swap方法交换了high和age的值,main方法里high和age的值也交换了。会让我们误以为传入的student是Student对象本身,而不是它的复制品。 其实不然,首先创建一个对象,内存中会有两个东西产生:栈内存中保存了该对象的引用变量,堆内存中保存了对象本身。 一开始,main()方法中调用swap()方法,mian()方法尚未结束,jvm会分别为main()和swap()开辟两个栈区,用于存放局部变量。调用swap()方法是,student变量作为实参传入swap()方法,同样是值传递方式:把实参student赋值给swap方法里的形参,不过这里的student是一个引用(也就是c中的指针),保存的是Student对象的地址值,用于找到堆内存的Student对象。所以swap里面的student也会指向Student对象的堆内存地址。 所以这种引用传递方式也是值传递,关键在于复制的是引用变量的副本,并未复制实际的Student对象。操作的都是同一个对象,因此swap交换后,main方法里面student的属性也会改变。
参考书籍:《疯狂Java讲义》
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |