int i = 0;
++i == i++; //true
i++ == i++; //false
Я знаю, что в случае пре-инкремента значение сначала увеличивается, а потом используется в выражении, а в случае пост-инкремента - наоборот. Но вот данный пример не могу понять.
Спасибо @AnT и @Grundy. Я понял, что в С/С++ поведение не определено. А что в случае с Java?
В первом выражении допустим значение i = 1, тогда получится
++i == i++, здесь выходит что слева сначала делается инкремент а потом возвращается значение, получается в первой части выражения получается 2, как Вы сами сказали, что посткремент сначала возвращает значение, а потом увеличивает, то он сначала вернет значение 2, получается что сравниваем 2 == 2, по-этому true.
Второй вариант
i++ == i++, здесь тот же принцип, сначала оценивается левая часть выражения, мы получаем 1 и потом увеличиваем его, в итоге два в памяти, а в выражении 1, далее идет оценка правой части выражения, принцип тот же, получаем уже 2, потому что прошлый инкремент увеличил число, возвращаем 2 в выражение и увеличиваем ее, в памяти уже 3, а в выражении 2, в итоге сравниваем
1 == 2, это false
Надеюсь что ответил на Ваш вопрос
Вот ссылки на спецификацию java, во всех подобных языках оно будет работать так же
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.15.1 https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.14.2
Ваш вопрос бессмыслен для любого языка программирования, если не известно, что такое i.
В языках С и С++, в предположении, что i - это некий объект скалярного типа, поведение этих выражений не определено. Никаких осмысленных результатов ваши выражения не порождают. Нет никакого смысла анализировать результаты бессмысленных выражений - они не подчиняются никакой логике.
Для C# и Java: если сначала i == 3 в одном и в другом случаях, то соответственно имеем
++i == i++; // ++i: увеличиваем i на 1, возвращается i (4), (i == 4)
// i++: возвращается i (4), а потом увеличивается i на 1, (i ==5)
// получаем 4 == 4 true
i++ == i++; // i++: возвращается i (3), а потом увеличивается i на 1, (i == 4)
// ++i: возвращается i (4), а потом увеличивается i на 1, (i == 5)
// получаем 3 == 4 false
Сборка персонального компьютера от Artline: умный выбор для современных пользователей