|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
java 跟C++不同,java的方式参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里详细分析一下。方式参数有基本类型,如int等,另外一种类型是OBJECT,对象。具体说一下方式参数是对象的,跟C++不同的是,JAVA方式参数传对象,传的是对这个对象引用的一份拷贝,即地址值,跟原来的引用都是指向同一个对象。所以说,JAVA方式参数传的都是值。 程序一 传的对象值是改变的。 public class Test { public Test() { int [] count={5}; change(count); System.out.println(count[0]); } public void change(int [] counts) { counts[0]=6; System.out.println(counts[0]); } public static void main(String [] args) { Test t=new Test(); } } 程序一中,输出结果都是6,change(count); 把对象的一份引用拷贝传给change(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。 程序2,传的对象值不改变 class Foo{ int i=0; } public class A{ public static void main(String args[]){ Foo f=new Foo(); add(f); System.out.println(f.i); } public static void add(Foo f){ f=new Foo(); f.i++; } } 输出结果是0 程序2中,也是传一份引用的拷贝,但在 add()方式中,f=new Foo(); NEW出了一个新的对象,所以引用的拷贝指向了一个新的OBJECT。原来的值还是没有改变。 程序3 String 不改变,数组改变 public class Example{ String str=new String(\"good\"); char[]ch={\\\'a\\\',\\\'b\\\',\\\'c\\\'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+\" and \"); Sytem.out.print(ex.ch); } public void change(String str,char ch[]){ str=\"test ok\"; ch[0]=\\\'g\\\'; } } 程序3输出的是 good and gbc. String 比较特殊,是因为java在传string的时候把string当成基本类型来处理 。所以值是不变的。 返回类别: 教程 上一教程: 在服务器端动态生成gif or jpg示例 下一教程: Java学习之Java的运行环境 您可以阅读与"java方式参数传值传引用的一点看法"相关的教程: · java函数传值的一点心得 · Java的参数传递的唯一方法:传值(By Value) · Java是传值还是传引用 · Java 按值传递参数 · 关于java中字符编码的一点心得,可能对初学者有点帮助 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |