快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

java方式参数传值传引用的一点看法

 
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的参数传递的唯一方法:传值(By Value)
· java函数传值的一点心得
· Java是传值还是传引用
· Java中向方式传参数只有传值一种!
· 关于java中字符编码的一点心得,可能对初学者有点帮助
    微笑服务 优质保证 索取样品