In this particular case, the results for both of them are the same. They are only syntactically different.
The first one is three variable declaration and initialisation statements whereas the second one is 3 variable declarations and 3 nested assignment statements. In the second one,
c = 0 is evaluates first to 0 and
c is assigned. Then the expression becomes
a = b = 0. Then
b = 0 is evaluated to 0 and
b is assigned. Finally,
a = 0 is evaluated and
a is assigned.
Things gets a bit different when you call methods instead of using a constant
int a = someMethod(); int b = someMethod(); int c = someMethod();
someMethod will be called three times. If
someMethod returns different things each time it is called,
c will be all different.
int a, b, c; a = b = c = someMethod();
someMethod will only be run once.
c will always be the same value.