有两个函数
public ActionForward addrow(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception
{
MainForm mainForm = (MainForm)form;

String addRowIndex = DataGridUtils.getRowSelected(request, "tblAddr") ;

SupplierCollectionCache cache = (SupplierCollectionCache)getCollectionCache(request);
ArrayList dtlList = (ArrayList)cache.getL3DataCache();
tblAddr_update(dtlList, mainForm);

SupplierPackingAddrVO vo = new SupplierPackingAddrVO();
vo.setCompany_id(this.getCompanyId(request));
        vo.setAddress_id((String)mainForm.getFld_packing_addrId("-1"));
vo.setAddress((String)mainForm.getFld_packing_address("-1"));
vo.setSdms_id((String)mainForm.getFld_packing_sdmsId("-1"));
vo.setPacking_region_id((String)mainForm.getFld_packing_regionId("-1"));
vo.setProvince_id((String)mainForm.getFld_packing_provinceId("-1"));
vo.setProvince_name((String)mainForm.getFld_packing_provinceName("-1"));
vo.setCity_id((String)mainForm.getFld_packing_cityId("-1"));
vo.setCity_name((String)mainForm.getFld_packing_cityName("-1"));
vo.setDistrict_id((String)mainForm.getFld_packing_districtId("-1"));
vo.setDistrict_name((String)mainForm.getFld_packing_districtName("-1"));
vo.setTown_id((String)mainForm.getFld_packing_townId("-1"));
vo.setTown_name((String)mainForm.getFld_packing_townName("-1"));
vo.setRef_no((String)mainForm.getFld_packing_ref_no("-1"));

dtlList.add(vo);
loadL3DataCache(mapping, form, request, response);
this.setGoAnchor(request, "tbl_addr_anchor_add");
this.setInitFocus(request, "document.forms[0].item(\"fld_packing_addrId(-1)\")");
initMainForm(mapping, form, request, response);
return mapping.getInputForward();
}

public void tblAddr_update(ArrayList dtlList, MainForm mainForm){
int size = Integer.parseInt(mainForm.getTblAddrSize());
for (int i=0; i <size; i++)
{
SupplierPackingAddrVO vo = (SupplierPackingAddrVO)dtlList.get(i);
vo.setAddress_id((String)mainForm.getFld_packing_addrId(String.valueOf(i)));
vo.setAddress((String)mainForm.getFld_packing_address(String.valueOf(i)));
vo.setSdms_id((String)mainForm.getFld_packing_sdmsId(String.valueOf(i)));
vo.setPacking_region_id((String)mainForm.getFld_packing_regionId(String.valueOf(i)));
vo.setProvince_id((String)mainForm.getFld_packing_provinceId(String.valueOf(i)));
vo.setProvince_name((String)mainForm.getFld_packing_provinceName(String.valueOf(i)));
vo.setCity_id((String)mainForm.getFld_packing_cityId(String.valueOf(i)));
vo.setCity_name((String)mainForm.getFld_packing_cityName(String.valueOf(i)));
vo.setDistrict_id((String)mainForm.getFld_packing_districtId(String.valueOf(i)));
vo.setDistrict_name((String)mainForm.getFld_packing_districtName(String.valueOf(i)));
vo.setTown_id((String)mainForm.getFld_packing_townId(String.valueOf(i)));
vo.setTown_name((String)mainForm.getFld_packing_townName(String.valueOf(i))); vo.setRef_no((String)mainForm.getFld_packing_ref_no(String.valueOf(i)));

}
}
我想知道第一个函数中的tblAddr_update(dtlList, mainForm);
是怎样更新到其中的dtlList是传地址吗?

解决方案 »

  1.   

    这个算是比较基础的Java函数传参问题了。如果用传统C++的方式来理解Java的话,可以认为Java的参数只有传值一种方式,但其特殊性在于:
    ◎ 如果参数是个基础类型(int之类),那么就是数值本身;
    ◎ 如果参数是个对象类型(String等),那么传递的值,是指该对象的地址。
      

  2.   

    java传递参数两种形式:
    1.基本类型。值传递,就是赋值,把变量的值赋给函数的参数。
    2.对象类型。引用,变量和函数的参数都引用的同一个对象。
    在引用的情况下,在函数里面修改了参数的值,就等同于修改了原对象。
    简单的例子:
    public void func()
    {
        /*比如说MyObject有一个成员变量叫value,int类型*/
        MyObject origin = new MyObject();
        origin.setValue(5); 
        System.out.println("value is " + origin.getValue());//value is 5
        MyObject ref = origin;//变量ref得到原对象origin的引用
        ref.setValue(3);
        System.out.println("value is " + origin.getValue());//value is 3
        /*作为函数参数的情况亦如此*/
    }