The best way to understand this is to run it through a debugger and follow exactly what happens.
int[] c = new int[1];
c[0] = 7;
This declares an array variable
c
, assigns it an array of one element, and puts the value
7
into the single element.
int[] d;
d = c;
This declares an array variable
d
, cities the array that
c
"points at" into it. At this point, c and d both refer to the same array of data, in the same way as "my car" and "my wife's car" both refer to the same vehicle because we only have one between us.
d[0] = c[0] + 3;
System.out.println(c[0]);
So since they are both the same array, you retrieve a value, add 3, and put it back where it came from. To continue the car metaphor, if I put my wallet in the glove box of "my car", my wife can open the glove box of "her car", find my wallet, and spend all my money!