'Array manipulation: adding elements
I am new to programming, and I just learned about array. However, in one of the quiz questions, I can't figure out why my answer is wrong. I tried to explain my thinking.
The question is:
int[] b = { 1, 2, 3 };
int[] c = b;
c[0] += b[2];
c[1] += b[1];
c[2] += b[0];
System.out.println(c[0] + c[1] + c[2]);
My thinking is although array is a reference type, int[] c = b can still be treated as
int [] c = { 1, 2, 3 }; // the same as int [] b
c[0] += b[2] means c[0] = c[0] + b[2] = 1 + 3 = 4
c[1] += b[1] means c[1] = c[1] + b[1] = 2 + 2 = 4
c[2] += b[0] means c[2] = c[2] + b[0] = 3 + 1 = 4
So I thought that the output is 12. However, the answer is 15.
I am so sorry for asking such a basic question, but I was wondering if anyone can help me understand how to come up with 15. Thank you so much!
Solution 1:[1]
actually java copies arrays by their references not values. so in the last line of your code, b[0] is changed to 4 so
c[2] += b[0] means c[2] = c[2] + b[0] = 3 + 4 = 7
so your output is 15. If you want to copy an array without reference,you can do this:
int[] c = Arrays.copyOf(b, b.length);
now, your output should be 12.
Solution 2:[2]
Since you set c = b, this means that whatever changes you make onto c will be reflected onto b and vice verca, since they reference the same array. If you wanted b and c to be separate arrays, you should use Arrays.copy().
For your problem, we can now go step by step to analyze how the values change during each step:
int[] b = { 1, 2, 3 };
int[] c = b;
c[0] += b[2];
//c[0] = c[0] + b[2] = 1 + 3 = 4
//b[0] = 4
// b and c = {4, 2, 3}
c[1] += b[1];
//c[1] = c[1] + b[1] = 2 + 2 = 4
//b[1] = 4
//b and c = {4, 4, 3}
c[2] += b[0];
//c[2] = c[2] + b[0] = 3 + 4 = 7
//b[2] = 7
//b and c = {4, 4, 7}
System.out.println(c[0] + c[1] + c[2]);
//4 + 4 + 7 = 15 :)
I hope this helped! Please let me know if you need any further clarification or details :)
Solution 3:[3]
As c and b refer to the same array, when c[0] is changed to 4, it means that b[0] is also 4. Thus, the result of c[2] += b[0] is 3 + 4 = 7, and the total sum of all elements is 4 + 4 + 7 = 15.
Assigning a reference to array int[] c = b; creates just an alias and it does NOT create a new instance of the array as in the case of its copying (using methods Arrays.copyOf, Arrays.copyOfRange, System.arraycopy) or cloning int[] c = b.clone();
Solution 4:[4]
The last statement ( c[2] + b[0]) will generate 7 and not 4 because b[0] has been updated to 4 in the first statement

then output will be 4 + 4+ 7 which is 15.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Pirisok |
| Solution 2 | Ani M |
| Solution 3 | |
| Solution 4 | Gurkirat Singh Guliani |
