|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
很多书籍都说Java支持传引用调用的方法,类似于C++中的Person &a引用调用,而近来编程碰到一系列问题让我对此产生了怀疑,于是将这些方式一一列出,我们来一起看看JAVA中的调用方法: 看下面的程序: class Person { private String name;//姓名 private String sex;//性别 public Person(String x, String y) { this.name = x; this.sex = y; } public void setStatus(String x, String y) { this.name = x; this.sex = y; } public String toString() { return name + sex; } // -----交换普通对象----- public static void changeref(Person tmpx, Person tmpy) { //交换tmpx和tmpy对象 Person swapref = tmpx; tmpx = tmpy; tmpy = swapref; // System.out.println(\"在方式中交换的结果: refa =\" + tmpx.toString()); // System.out.println(\"在方式中交换的结果: refb =\" + tmpy.toString()); } // ----- 交换数组对象----- public static void changeArrayRef(Person[] x, Person[] y) { //交换数组对象 Person swaparrayref = x[x.length-1]; x[x.length-1] =y[x.length-1]; y[x.length-1] = swaparrayref; } //-----交换数组----- public static void changeArray(int[] x,int[] y) { int[] tmp =x; x = y; y = tmp; } } public class Demo { public static void main(String[] args) { //-------建立并构造两个对象--------- Person refa = new Person(\"张三\", \"男\"); Person refb = new Person(\"李四\", \"男\"); //交换refa对象和refb对象 Person.changeref(refa, refb); //从交换结果中看出,实际对象并未交换 System.out.println(\"在主函数中交换的结果 refa = \" + refa.toString()); System.out.println(\"在主函数中交换的结果 refb = \" + refb.toString()); //-------建立两个对象数组---------- Person[] arraya = new Person[1]; Person[] arrayb = new Person[1]; //分别构造数组对象 arraya[0] = new Person(\"王五\",\"男\"); arrayb[0] = new Person(\"赵六\",\"男\"); /*数组对象为null时,不能设置其值,必须先构造它(即调用构造函数),再用其它方式设置其值 */ System.out.println(’/n’+\"数组对象交换前的结果 arraya = \" + arraya[0].toString()); System.out.println(\"数组对象交换前的结果 arrayb = \" + arrayb[0].toString()); //交换这两个数组对象 Person.changeArrayRef(arraya, arrayb); System.out.println(\"-交换后的结果 arraya = \" + arraya[0].toString()); System.out.println(\"-交换后的结果 arrayb = \" + arrayb[0].toString()); //-------建立两个普通数组--------- int[] a = new int[2]; int[] b = new int[2]; //给数组个元素赋值 for(int i =0;i<a.length;i++){ a[i] = i; b[i] = i+1; } System.out.println(’/n’+\"数组交换前 inta[0] = \" + a[0]); System.out.println(\"数组交换前 intb[0] = \" + b[0]); //交换数组 Person.changeArray(a,b); System.out.println(\"-交换后的结果 inta[0] = \" + a[0]); System.out.println(\"-交换后的结果 intb[0] = \" + b[0]); } } 从程序执行的结果来看:在交换两个对象时,仅仅改变了对象句柄的指向,而没有改变对象内容,因此方式参数为对象时,并不交换实际内容,而是交换了拷贝内容。 数组对象有点希奇,在形参中交换了,实参也反应出来。 数组和普通数据类型相同,形参的改变,不会反应到实参中来。 对象也相同,形参改变了,实参相同不会反应出来。 小结一下: 1、方式可以修改对象参数的状态 2、方式不能让对象参数指向新的对象 3、方式不能修改基本类型(int、byte等)的参数 返回类别: 教程 上一教程: Java的Package与Import机制之我的理解(初学者的心得) 下一教程: (albertyi原创)Eclipse 安装,调试迅速入门 您可以阅读与"谈谈JAVA中的调用方法"相关的教程: · 一个用JSP实现的分页的类及调用方式 · JAVA中的函数动态调用 · 全面挖掘Java Excel API 使用方式(2) · 全面挖掘Java Excel API 使用方式 · 一些异常有用的JAVA常用方式( 2) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |