'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 enter image description here

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