1 00:00:00,000 --> 00:00:01,000 Hello team! 2 00:00:01,000 --> 00:00:05,000 In this lesson we will discuss with you a very important topic which even some more experienced software 3 00:00:05,000 --> 00:00:08,000 engineers can't understand. 4 00:00:08,000 --> 00:00:12,000 But I will explain you this topic with simple examples and you will remember it easily. 5 00:00:13,000 --> 00:00:18,000 Today we will talk with you how data is passed to the method in Java by value or by reference. 6 00:00:18,000 --> 00:00:18,000 Why? 7 00:00:18,000 --> 00:00:23,000 This question is important because in different programming languages, you can decide whether you want 8 00:00:23,000 --> 00:00:26,000 to pass value to the method by value or by reference. 9 00:00:27,000 --> 00:00:33,000 This might affect the state of the data which was supposed to be modified after specific method call. 10 00:00:33,000 --> 00:00:38,000 So you already understand that we can pass arguments by value and by reference. 11 00:00:38,000 --> 00:00:40,000 What does pass by value mean? 12 00:00:40,000 --> 00:00:46,000 Passing by value means that the value of the method parameter is copied into another location of your 13 00:00:46,000 --> 00:00:52,000 memory, and when accessing or modifying the variable within your function, only the copy is accessed 14 00:00:52,000 --> 00:00:55,000 or modified and the original value is left untouched. 15 00:00:56,000 --> 00:01:01,000 Imagine empty cup and specific function which you want to use to fill this cup with coffee. 16 00:01:01,000 --> 00:01:08,000 In case we pass by value, we copy this cup inside the function and all changes with this cup affects 17 00:01:08,000 --> 00:01:10,000 only cup which was copied. 18 00:01:11,000 --> 00:01:13,000 Then what does pass by reference mean? 19 00:01:14,000 --> 00:01:18,000 Passing by reference means that the memory address of the variable, or it is better to say a pointer 20 00:01:18,000 --> 00:01:21,000 to the memory location is passed to the method. 21 00:01:22,000 --> 00:01:26,000 In case we pass by reference, we pass the address where this cup is located. 22 00:01:26,000 --> 00:01:31,000 And when I fill the cup inside the function, I also fill the original cup. 23 00:01:31,000 --> 00:01:34,000 And now please remember the rule in Java. 24 00:01:34,000 --> 00:01:38,000 Primitive and reference types of data are passed by value. 25 00:01:38,000 --> 00:01:41,000 That is the only right answer on the interview. 26 00:01:41,000 --> 00:01:46,000 You can read in internet that Java objects are passed by reference, and primitive types are passed 27 00:01:46,000 --> 00:01:46,000 by values. 28 00:01:46,000 --> 00:01:49,000 That is not true on the simple examples. 29 00:01:49,000 --> 00:01:50,000 I will prove you this. 30 00:01:51,000 --> 00:01:54,000 Here I have int value which is equal to ten. 31 00:01:54,000 --> 00:01:57,000 I have method which takes int as a parameter inside it. 32 00:01:57,000 --> 00:01:59,000 We want to increase I by 100. 33 00:02:00,000 --> 00:02:02,000 What value of I will be in console here? 34 00:02:02,000 --> 00:02:05,000 After the method call, the value will be ten. 35 00:02:05,000 --> 00:02:06,000 Why? 36 00:02:06,000 --> 00:02:09,000 Because in Java everything is passed by value. 37 00:02:09,000 --> 00:02:16,000 Here when I called method, the copy of I variable was created and when I increased I by 100 value, 38 00:02:16,000 --> 00:02:20,000 the result was assigned to the local I variable, but not to this one. 39 00:02:21,000 --> 00:02:22,000 These two are different. 40 00:02:23,000 --> 00:02:28,000 They remember in the lesson when we discussed Java memory model, I told you about stack memory. 41 00:02:28,000 --> 00:02:32,000 When this method is called copy of the I was created in stack. 42 00:02:32,000 --> 00:02:35,000 So in this case how I can change the value of I. 43 00:02:35,000 --> 00:02:39,000 Here the only way to do this in Java is to use return statement. 44 00:02:39,000 --> 00:02:43,000 Your message should return some value which will be assigned to the variable. 45 00:02:43,000 --> 00:02:52,000 Like in this example I call method change int, I add 100 and I return the value from this method which 46 00:02:52,000 --> 00:02:53,000 is assigned to I variable. 47 00:02:53,000 --> 00:02:54,000 Here. 48 00:02:56,000 --> 00:02:57,000 Let's move on. 49 00:02:58,000 --> 00:03:03,000 Now I have array of ints and you remember that arrays are reference type of data. 50 00:03:03,000 --> 00:03:07,000 I have method which has some logic inside to change state of the array. 51 00:03:08,000 --> 00:03:14,000 I want to make second element in this array equal to 200, but not two as in original array. 52 00:03:14,000 --> 00:03:17,000 Let me print this array to console after this method call. 53 00:03:17,000 --> 00:03:20,000 What do you think will be the second element? 54 00:03:20,000 --> 00:03:21,000 2 or 200. 55 00:03:22,000 --> 00:03:23,000 And it is 200. 56 00:03:24,000 --> 00:03:29,000 You might be wondering how this could happen if in Java we pass everything by value, then modification 57 00:03:29,000 --> 00:03:33,000 which we did in the method should not affect original array. 58 00:03:33,000 --> 00:03:35,000 Let's understand what has happened here. 59 00:03:35,000 --> 00:03:39,000 I call the method and pass reference to the array object. 60 00:03:39,000 --> 00:03:40,000 Attention. 61 00:03:40,000 --> 00:03:47,000 I pass the reference to the array, but not the array, and copy of the reference is created here. 62 00:03:47,000 --> 00:03:50,000 I can get access to the array through the reference. 63 00:03:50,000 --> 00:03:55,000 So here I use the reference to get access to the same array as here. 64 00:03:55,000 --> 00:04:00,000 These two variables reference to the same array object in the heap memory. 65 00:04:01,000 --> 00:04:06,000 Probably now you want to get proofs that this is a copy of reference, but not copy of the array. 66 00:04:06,000 --> 00:04:09,000 I have another method with name clear array. 67 00:04:09,000 --> 00:04:13,000 It takes an array as a parameter and makes this variable reference to null. 68 00:04:13,000 --> 00:04:16,000 Let me call this method with our array. 69 00:04:16,000 --> 00:04:18,000 Now I print it to console. 70 00:04:18,000 --> 00:04:22,000 What will be printed to console null or values from array? 71 00:04:22,000 --> 00:04:24,000 Values from array is on place. 72 00:04:25,000 --> 00:04:25,000 Why? 73 00:04:25,000 --> 00:04:32,000 Because this is copy of reference and now local method variable which exists only in scope of this method. 74 00:04:32,000 --> 00:04:33,000 References to null. 75 00:04:33,000 --> 00:04:35,000 No problems at all. 76 00:04:35,000 --> 00:04:39,000 This reference still refers to the object on heap memory. 77 00:04:39,000 --> 00:04:45,000 And now you can be sure that even when we pass objects in Java to the method, we still pass by value 78 00:04:45,000 --> 00:04:51,000 because we pass reference to the object and we pass value of the reference. 79 00:04:51,000 --> 00:04:55,000 Hope examples from this lesson help you understand the topic better. 80 00:04:56,000 --> 00:04:58,000 Let's recap what we have learned today. 81 00:04:58,000 --> 00:05:02,000 Today we learned what does pass by value and pass by reference mean. 82 00:05:02,000 --> 00:05:06,000 We also understood that in Java everything is passed by value. 83 00:05:06,000 --> 00:05:10,000 On the examples, we saw how primitive and reference types passed by value. 84 00:05:11,000 --> 00:05:12,000 That's all for today. 85 00:05:12,000 --> 00:05:14,000 Thanks a lot for your attention. 86 00:05:14,000 --> 00:05:16,000 See you in the next lesson. 87 00:05:16,000 --> 00:05:16,000 Your.