Первый выводит значения параметров, второй выводит статические поля.
Давайте посмотрим на все значения соответствующих значений.
public void badSwap(int var1, int var2){
var1
и var2
- аргументы, передаваемые методу.
int temp = var1;
temp устанавливается на переданное в var1.
this.var1 = var2;
Статическое поле var1
устанавливается на переданное в var2
. Это плохой стиль, потому что это излишне запутанно. Если у вас есть причина использовать статическое, напишите swapex.var1
.
this.var2 = temp;
Опять же, статическое поле устанавливается.
System.out.println("var1 " + var1 + " var2 "+ var2);
Местные жители печатаются.
Вернуться на главную, строка:
System.out.println("var1 " + var1 + " var2 "+ var2);
разрешает статические поля, потому что нет переменных стека с этими именами. Опять же, это тоже плохой стиль. Вы бы использовали swapex.var1
и swapex.var2
.
Таким образом, причина, по которой они печатаются по-разному, заключается в том, что вы сначала печатаете исходные несмененные аргументы, а затем заменяемые (обратные аргументам) статические поля.