Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
 Аватар для Артём121
66 / 65 / 13
Регистрация: 15.11.2010
Сообщений: 396
Записей в блоге: 1

Почему i=i++ равняется i ?

30.03.2013, 01:54. Показов 3512. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть следующий код
Java
1
2
3
4
5
6
7
public class DemoAB {
    public static void main(String[] args) {
        int i = 2;
        i = i++;
        System.out.println(i);
    }
}
На консоль выводит 2. Почему инкремент не срабатывает ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2013, 01:54
Ответы с готовыми решениями:

Как проверить, равняется ли количество строк в таблице количеству столбцов?
Есть таблица чисел,нужно проверить равняется ли кол-во строк в таблице кол-ву столбцов и если это так,то найти произведение элементов...

Найти двузначное число, которое равняется утроенному произведению его цифр
Помогите пожалуйста!! 3.Найти двохзначне число, которое равняется строенном произведению его цифр

1,8 + 0,1 не равняется 1,9
Уже это обсуждалось, но не знаю, как найти в интернете. Как это учитыватать надо? Пример кода, о чём идёт речь: Sub...

6
 Аватар для FDrum
-3 / 0 / 2
Регистрация: 18.02.2010
Сообщений: 80
30.03.2013, 02:03
а сколько ты хочешь?
если хочешь что бы инкремент сработал и добавил единицу поставь
Java
1
i = ++i;
тогда будет три.
0
 Аватар для Артём121
66 / 65 / 13
Регистрация: 15.11.2010
Сообщений: 396
Записей в блоге: 1
30.03.2013, 02:13  [ТС]
Я хочу понять алгоритм работы такого выражения. Понятно, что в выражении i=i++ сначала переменной i присваивается значение i. А куда деётся инкремент ? Почему он не происходит, ведь я к переменной обращаюсь второй раз при выводе.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
30.03.2013, 02:27
i++ возвращает i и только потом делает инкремент. То есть последовательность действий выходит такая:
1. Запоминаем значение i
2. Увеличиваем i на единицу
3. Присваеваем i запомненое на первом шаге значение

Именно по причине первого пункта рекомендуется для простого инкремента использовать выражение ++i вместо i++ (оптимизатор, конечно, такие вещи просекает, но мы же не на php пишем, лучше все контролировать самому). Преинкремент же никогда не требует сохранения исходного значения.
0
 Аватар для FDrum
-3 / 0 / 2
Регистрация: 18.02.2010
Сообщений: 80
30.03.2013, 02:28
не успел(
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
30.03.2013, 02:37
то чего вы ожадаете справедливо для ++i (преинкремент), а i++ (постинкремент) работает несколько иначе

i++ means post increment. It means, the value will be incremented after the operation is performed on it. It doesnt mean, the statement will be completed before execution. That is the value of the variable 'i' will be stored in a temporary location, then the value is incremented and then, the actual operation is performed, in this case assignment, on the value in the temporary location.

Hence,

Java
1
i = i++;
is equivalent to,

Java
1
2
3
int temp = i; // temp = 0
i++; // i=1
i = temp; // i = 0
тут подробней


апд. тож не успел. но пусть будет
1
 Аватар для Артём121
66 / 65 / 13
Регистрация: 15.11.2010
Сообщений: 396
Записей в блоге: 1
30.03.2013, 13:37  [ТС]
AckiyBolt, спасибо за статью.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2013, 13:37
Помогаю со студенческими работами здесь

RtlInitAnsiString - inBuf равняется ?
Пишу программу, которая на уровне пользователя получает список процессов, нужное имя процесса передает драйверу и скрывает данный...

Вычислить Z, которая равняется
Помогите определить ошибку и доработать прогу. Вот условие: "Есть два массива X(10), Y(12). Высчитать значение Z, которое равно сумме...

Косинус 90 градусов равняется бреду
// var_7.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <math.h> #define...

label на форме равняется CommandButton.name
label на форме равнялся CommandButton.name котрый запускает форму

Чему приближённо равняется высота дерева
Длина тени, которую отбрасывает столб высотой 5 м в определенный момент времени, равна 3 м. Чему приближённо равняется высота дерева, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 05.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 03.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru