1 / 45

Understanding Parameter Passing

Understanding Parameter Passing. Parameters are Passed by Value.

warrenj
Download Presentation

Understanding Parameter Passing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Understanding Parameter Passing

  2. Parameters are Passed by Value • It is important to understand how parameter passing works. When you make changes to a parameter passed to a method, a separate copy of the value is passed. Any changes made to the parameter passed into the method will have no effect on the actual parameter.

  3. Parameters are Passed by Value • It is important to understand how parameter passing works. When you make changes to a parameter passed to a method, a separate copy of the value is passed. Any changes made to the parameter passed into the method will have no effect on the actual parameter. • Java passes all parameters to a method by value.

  4. Parameters are Passed by Value • It is important to understand how parameter passing works. When you make changes to a parameter passed to a method, a separate copy of the value is passed. Any changes made to the parameter passed into the method will have no effect on the actual parameter. • Java passes all parameters to a method by value. • This means that the current value of the actual parameter is copied into the formal parameter in the method header.

  5. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } Using the code at left, we will demonstrate how primitive data types are handled as parameters in method calls. An ExampleUsing Primitive Data Types

  6. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } The program begins by assigning the value 25 to the integer variable parameter. An ExampleUsing Primitive Data Types value parameter 25 Output :

  7. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } The test object is created. An ExampleUsing Primitive Data Types value parameter 25 Output :

  8. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } The value of parameter is displayed. An ExampleUsing Primitive Data Types value parameter 25 Output : Initial parameter value is 25

  9. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } The PrimitiveParamTest object method changeValue is called. An ExampleUsing Primitive Data Types value parameter 25 Output : Initial parameter value is 25

  10. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } As a result of the method call, a copy of parameter is made. This copy is called the formal parameter. The formal parameter is sent to the method. An ExampleUsing Primitive Data Types value formal parameter 25 parameter 25 Output : Initial parameter value is 25

  11. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } When the method refers to parameter, it uses the formal parameter. The formal parameter is changed to 100. An ExampleUsing Primitive Data Types value formal parameter 100 parameter 25 Output : Initial parameter value is 25

  12. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } The value of the formal parameter is displayed. An ExampleUsing Primitive Data Types value formal parameter 100 parameter 25 Output : Initial parameter value is 25 Inside method changeValue, parameter value changed to 100

  13. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } As the method is left, the formal parameter is destroyed. An ExampleUsing Primitive Data Types value formal parameter 100 parameter 25 Output : Initial parameter value is 25 Inside method changeValue, parameter value changed to 100

  14. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } Control is returned to the calling method. The formal parameter no longer exists. An ExampleUsing Primitive Data Types value parameter 25 Output : Initial parameter value is 25 Inside method changeValue, parameter value changed to 100

  15. public class PrimitiveParamTest { public voidchangeValue (int parameter) { parameter = 100; System.out.println("Inside method changeValue, parameter value changed to " + parameter); } public static void main (String args[]) { int parameter = 25; PrimitiveParamTest test = new PrimitiveParamTest(); System.out.println("Initial parameter value is " + parameter); test.changeValue(parameter); System.out.println("After method changeValue call, parameter value is " + parameter); } } The value of parameter is displayed. An ExampleUsing Primitive Data Types value parameter 25 Output : Initial parameter value is 25 Inside method changeValue, parameter value changed to 100 After method changeValue call, parameter value is 25

  16. Passing Objects as Parameters • How does Java pass objects by value?

  17. Passing Objects as Parameters • How does Java pass objects by value? • When an object is passed to a method, we are actually passing a reference to that object.

  18. Passing Objects as Parameters • How does Java pass objects by value? • When an object is passed to a method, we are actually passing a reference to that object. • The value that is copied is the address of the object.

  19. myObject Referencing Objects Since a reference to an object actually contains the address of the object, the name of the object can been viewed as a “pointer” to the actual object. Remember that an object doesn’t “exist” until it is instantiated. Shape myObject; null

  20. myObject Instantiating Objects The object comes into “existence” when it is instantiated. For example the following code will create the object below: myObject = new Shape();

  21. myObject Copying Objects When an object is assigned to another object, a copy of the reference to the object is made, not a copy of the actual object. Shape myCopy = myObject; myCopy

  22. myObject Copying Objects In this example, myCopy is an alias for myObject. Both myObject and myCopy refer to the same object. myCopy

  23. myObject Passing Objects as Parameters In the example involving primitive data types, when an int type is passed as a parameter, a copy, known as the formal parameter is used by the called method. When an object is passed to a method, the formal parameter used is an alias, which is a copy of the reference to an object.

  24. myObject Passing Objects as Parameters If the following method is called : foo.someMethod(myObject); A copy or alias of myObject is created and used as the formal parameter.

  25. myObject The formal parameter Passing Objects as Parameters If the following method is called : foo.someMethod(myObject); A copy or alias of myObject is created and used as the formal parameter.

  26. myObject The formal parameter Passing Objects as Parameters If the following method is called : foo.someMethod(myObject); A copy or alias of myObject is created and used as the formal parameter. Inside a method, if the formal parameter calls class methods that modify the state of the object, the object will remain in that state when the program flow returns to the instruction following the method call.

  27. myObject Passing Objects as Parameters Given the following code fragments: public class Foo { public voidchangeObject(Shape myObject) { myObject.changeShape(); } . . . } . . . Foo changer = new Foo(); myObject = new Shape(); changer.changeObject(myObject);

  28. myObject Passing Objects as Parameters Given the following code fragments: public class Foo { public voidchangeObject(Shape myObject) { myObject.changeShape(); } . . . } . . . Foo changer = new Foo(); myObject = new Shape(); changer.changeObject(myObject); When the changeShape method is called, a formal parameter is created.

  29. myObject The formal parameter Passing Objects as Parameters Given the following code fragments: public class Foo { public voidchangeObject(Shape passedObject) { passedObject.changeShape(); } . . . } . . . Foo changer = new Foo(); myObject = new Shape(); changer.changeObject(myObject); When the changeShape method is called, a formal parameter is created. This formal parameter is referred to as passedObject in the changeObject method.

  30. myObject The formal parameter Passing Objects as Parameters Given the following code fragments: public class Foo { public voidchangeObject(Shape passedObject) { passedObject.changeShape(); } . . . } . . . Foo changer = new Foo(); myObject = new Shape(); changer.changeObject(myObject); When passedObject.changeShape() is called, the formal parameter, passedObject, calls the object’s method changeShape().

  31. myObject The formal parameter Passing Objects as Parameters Given the following code fragments: public class Foo { public voidchangeObject(Shape passedObject) { passedObject.changeShape(); } . . . } . . . Foo changer = new Foo(); myObject = new Shape(); changer.changeObject(myObject); This causes the object to change its state (in this case, its shape).

  32. myObject The formal parameter Passing Objects as Parameters Given the following code fragments: public class Foo { public voidchangeObject(Shape passedObject) { passedObject.changeShape(); } . . . } . . . Foo changer = new Foo(); myObject = new Shape(); changer.changeObject(myObject); When the changeObject method ends, the formal parameter ceases to exist.

  33. myObject Passing Objects as Parameters Given the following code fragments: public class Foo { public voidchangeObject(Shape passedObject) { passedObject.changeShape(); } . . . } . . . Foo changer = new Foo(); myObject = new Shape(); changer.changeObject(myObject); When the changeObject method ends, the formal parameter ceases to exist. BUT, the object still exists in its changed state.

  34. Changing object formal parameters If an object formal parameter can change an object’s state by calling the object’s methods, what happens when the value of the formal parameter is changed?

  35. Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } The code from the previous example is changed slightly.

  36. myObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } If myObject is passed to the changeObject method,

  37. myObject passedObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } If myObject is passed to the changeObject method, a formal parameter passedObject is created.

  38. myObject passedObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } Another object, newObject is created. newObject

  39. myObject passedObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } Another object, newObject is created. The valueof passedObjectis changed to newObject. newObject

  40. myObject passedObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } The formal parameter passedObject, calls the method changeShape(). newObject

  41. myObject passedObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } This causes the object to change its state (in this case, its shape). newObject

  42. myObject passedObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } When the changeObject method ends, the formal parameterpassedObject ceases to exist. newObject

  43. myObject Changing object formal parameters public class Foo { public voidchangeObject(Shape passedObject) { Shape newObject = new Shape(); passedObject = newObject; passedObject.changeShape(); } . . . } When the changeObject method ends, the formal parameterpassedObject ceases to exist. myObject remains unchanged. newObject

  44. Summary • Java passes all parameters to a method by value. • This means that the current value of the actual parameter is copied into the formal parameter in the method header. • Since a reference to an object actually contains the address of the object, the name of the object can been viewed as a “pointer” to the actual object.

  45. Summary • When an object is passed to a method, the formal parameter used is an alias, which is a copy of the reference to an object. • An object’s formal parameter can change an object’s state by calling the class’ methods, but, • If the value of the formal parameter is changed, the actual object remains unchanged.

More Related