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

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

Java的参数传递的唯一方法:传值(By Value)

 

之所以把这个问题拿出来重新分析一次,是因为我们操作Java的对象(Object)全是通过对象的引用(Object references),引用可以理解为指针,轻易让人对应到C++的传址上面去。讨论讨论有百益而无一害嘛。

在传基本数据类型 变量时,直接传值不会让人费解;但当传递对象时,就应该理解为传递的是对象引用的值,但这个值并不是对象本身,而是指向该对象,即你让另一个引用指向了该对象。

--Java以By Value的方法传递Object reference。

以下面简朴程序为例:

package test;

public class BlogTest
{
    public void modifyAAA(int x, java.util.ArrayList list)
    {
        x += 5;
        System.out.println(\"x=====\" + x);
        list.add(new java.util.Date());
        System.out.println(list.size());
    }

    public static void main(String[] args)
    {
        BlogTest blogtest = new BlogTest();
        int i = 5;
        java.util.ArrayList list = new java.util.ArrayList();
        System.out.println(\"i=======\" + i);
        System.out.println(\"list.size()===\"+list.size());
        blogtest.modifyAAA(i, list);
        System.out.println(\"i==new==\" + i);
        System.out.println(\"list.size()====\" + list.size());
    }
}
/*
运行得到的结果是这样的
i=======5
list.size()===0
x=====10
1
i==new==5
list.size()==new==1
*/

这说明在参数传递过程中发生了以下事情:int 变量 i 被复制了一份给 int  x,在modifyAAA()方式中改变了x的值并不会影响主函数中i的值,当然,这是变量生存区间不同,很好理解。但发现list对象的引用传到modifyAAA()方式的前后,主函数中的list也跟着发生了变化。这正说了在传递对象引用时,形参得到了实参对象的引用拷贝,两个引用都指向了同一list对象,所以形参改变了list同时也能反映到实参中来。






返回类别: 教程
上一教程: Java Reflection (JAVA反射)
下一教程: Java网络服务器编程

您可以阅读与"Java的参数传递的唯一方法:传值(By Value)"相关的教程:
· java方式参数传值传引用的一点看法
· Java中向方式传参数只有传值一种!
· java函数传值的一点心得
· 传递原始类型参数给方式
· javascript向jsp传递参数的一种手段:使用xmlhttp对象
    微笑服务 优质保证 索取样品