This is a trick that happens to work because it is simply a rewriting of an ordinary if-statement. This code is equivalent to this:
int variable;
if (int.TryParse(stringVariable, out variable))
    variable = variable;
else
    variable = 0;
The sequence is as follows:
int.TryParse is called, variable is not initialized before this but it doesn't have to either. An out parameter does not require a definite assigned variable. As part of the method execution, the variable will be given a value, and int.TryParse will return true or false.
If the method returns true then the result of the expression  will be variable and thus we will execute basically variable = variable.
If the method returns false then the result of the expression  will instead be 0, and variable will now be given the value 0 regardless of what it was given as part of int.TryParse. In this case, however, this will not change the variable because int.TryParse has already given the variable a default value when it returns false which also happens to be 0.
This is basically a way to get everything onto one line.
Personally I would've written this code like this:
int variable;
int.TryParse(stringValue, out variable);