Welll,
  Common misconception, but, technically all java calls are "by value".
That is, there is no such thing in java as passing something "by reference".
The hook is, the value passed in when something is an Object is actually a
reference (aka a pointer) to the existing object.  
While you can manipulate the thing that this points to, you cannot reassign
it point to something else.  I got all bunged up about this also and I think
it's a pretty important point that can easily be missed if you came into
java from another language that allows "by reference" calls.

By saying that objects are passed "by reference" folks are actually making
things more complicated than they need to be...  For a really good
explanation see http://www.yoda.arachsys.com/java/passing.html



worse is better 

-----Original Message-----
From: Larry Meadors [mailto:[EMAIL PROTECTED] 
Sent: Monday, December 01, 2003 10:52 AM
To: [EMAIL PROTECTED]
Subject: Re: Question regarding ActionForms.


Welcome to java 101, formerly known as the struts-users mailing list.

Object references are passed to method calls. While that reference cannot be
changed, the object that it references can. On the other hand, if you create
a new action form and assign it to the "form" parameter, nothing will happen
because that reference cannot be changed.

Larry

>>> [EMAIL PROTECTED] 12/01/03 8:42 AM >>>
Hi,

I am currently using Struts 1.0.2 and have notice something with regard to
handling of ActionForms.

Why is it, that in the "perform()" method of my Action I am able to modify
the passed-in ActionForm and all modifications that I make to the ActionForm
in my Action have effect on the ActionForm in the session, without the need
to reset the modified form in the session. e.g.

public ActionForward peform(ActionMapping mapping,
                            ActionForm form,
                            HttpServletRequest request,
                            HttpServletResponse response,
                            )throws IOException, ServletException

{
      MyForm myForm = (MyForm)form;

      form.setMemberA("valA");
      form.setMemberB("valB");

      // why dont I have to do the following: session.setAttribute
("myFormName", myForm);

      return "success";

}

I thought that since Java passes method arguments by value and not by
reference, then I would have to reset my modifed copy back into the session
for changes on the form to be visible in the form in the session ?

Any insights on how this mechanism works would be greatly appreciated.

Thanks,

Sepand



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

-----------------------------------------
This message and its contents (to include attachments) are the property of Kmart 
Corporation (Kmart) and may contain confidential and proprietary information. You are 
hereby notified that any disclosure, copying, or distribution of this message, or the 
taking of any action based on information contained herein is strictly prohibited. 
Unauthorized use of information contained herein may subject you to civil and criminal 
prosecution and penalties. If you are not the intended recipient, you should delete 
this message immediately.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to