Simply put, "val1" and "val2" are pointers to the actual array. You're assigning val2 to point to the same array as val1. Therefore, change one, and the other sees the same change. To have it truly be a copy, you'd have to clone the array instead of assigning.