Операция приращения байтов в Java [duplicate]

На этот вопрос уже есть ответ здесь:

почему byte + = 1 compile, а byte = byte + 1 not? 8 ответов

Что происходит, когда мы пытаемся увеличить байтовую переменную, используя оператор приращения, а также оператор сложения.

public class A{

    public static void main(String args[])

    {

        byte b=1;

        b++;

        b=b+1;

    }

}

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

 ppeterka19 нояб. 2012 г., 12:18
What happens...  Почему Дон'ты попробуешь это?
 Peter Lawrey19 нояб. 2012 г., 12:21
Если вы не используетеb ты выиграл'Ничего не происходит.
 Rohit Jain19 нояб. 2012 г., 12:26
@PeterLawrey .. Почему? 3-е утверждение фактически не будет компилироваться. Не могу разыграть формуint к а.byte
 Stephen C19 нояб. 2012 г., 12:20
Пожалуйста, дайте мне источник, где мы можем найти такие мелочи " - Учебник по Java, любой хороший учебник по Java ... или, если вы хорошо умеете читать формальные документы, спецификация языка Java

Ответы на вопрос(3)

Что просходит? На самом делеb = b + 1 победил'т компилировать.

Вы должны явно преобразовать его вbyte, так какb + 1 оцениваетint, И это не гарантирует, чтоint может вписаться в.byte

b = (byte)(b + 1);

 Rohit Jain19 нояб. 2012 г., 12:24
@Praveen .. Смотрите мой ответ ниже.
 Praveen19 нояб. 2012 г., 12:21
Почему так происходит, Рохит?
 Rohit Jain19 нояб. 2012 г., 12:19
Ну, b = b + 1 не скомпилируется.
 Petar Minchev19 нояб. 2012 г., 12:25
ОК, я отредактировал свой ответ.
Решение Вопроса

б ++; и b = b + 1; эквивалентны и приведут к тому же байт-коду.

b будет равно 3 до завершения основного метода.

Изменить: на самом деле они не эквивалентны: b = b + 1; неверно и должно быть b = (byte) (b + 1); [приведен к байту, иначе это int]

 Praveen19 нояб. 2012 г., 12:20
Но когда я выполняю код, яполучаю ошибку времени компиляции ???
Решение Вопроса

Различия это то, что естьimplicit casting в++ оператор изint вbyteв то время как вы должны были бы сделать этоexplicitly если вы используетеb = b + 1

Вам нужно явное приведение: -

b = (byte) (b + 1);

В то время как,b++ будет работать нормально Это (++ оператор) автоматически приводит значениеb + 1 который являетсяint к а.byte

Это четко указано вJLS - §15.26.2 Составные операторы присваивания : -

Составное выражение присваивания в форме E1 op = E2 эквивалентно E1 = (T) ((E1) op (E2)), где T - это тип E1, за исключением того, что E1 оценивается только один раз

Обратите внимание, что операцияb + 1 даст вам результат типаint, Чтобы'Поэтому вам нужно явное приведение во втором назначении.

 Rohit Jain19 нояб. 2012 г., 12:25
Где вы используете int?
 Praveen19 нояб. 2012 г., 13:00
@RohitJain Спасибо, брат ... Продолжай делиться
 Praveen19 нояб. 2012 г., 12:40
@RohitJain Ура, спасибо ............ Это работает
 Praveen19 нояб. 2012 г., 12:46
@RohitJain Могу ли я получить ваш почтовый идентификатор?
 Vishal19 нояб. 2012 г., 12:35
Так что же произойдет, если я напишу b = b + (byte) 1? Просто любопытно!!!
 Rohit Jain19 нояб. 2012 г., 12:29
@Praveen .. Это не должно давать ошибку AFAIK. Можете ли вы опубликовать свой текущий код?
 Vishal19 нояб. 2012 г., 12:39
@RohitJain Теперь я немного запутался ... В любом случае, я постараюсь найти его позже. Спасибо
 Rohit Jain19 нояб. 2012 г., 12:36
@Praveen .. Обратите внимание на кронштейн.(byte)b + 1 должно быть(byte)(b + 1)
 Rohit Jain19 нояб. 2012 г., 12:42
@Praveen .. Все приходит из опыта, мой братан. Дон»не волнуйтесь, если вы нене знаю о них сейчас. Каждый день вы продолжаете добавлять новые вещи в свою сумку знаний, и таким образом изучать много вещей. Просто наслаждайтесь кодированием и забудьте все :)
 Rohit Jain19 нояб. 2012 г., 12:40
@Vishal .. На самом деле, тип результата, который вы получаете для выражения, по крайней мере,int, Теперь, когда вы добавляете более высокий тип, тип результата - это более высокий тип. Операция между: -,,byte and byte is intint and byte is intint and long is long, и так далее.,
 Rohit Jain19 нояб. 2012 г., 12:46
@ Правин .. ЭтоS в моем профиле информации. И ты'добро пожаловать :)
 Praveen19 нояб. 2012 г., 12:25
Но когда я использую int, он все еще показывает мне ошибку ???
 Praveen19 нояб. 2012 г., 12:28
Извините, Рохит ..... Когда я использую явное приведение, которое тысказал, все еще дает мне ошибку.
 Praveen19 нояб. 2012 г., 12:44
Да брат ... Спасибо за вашу помощь. Могу ли я получить ваш почтовый идентификатор?
 Praveen19 нояб. 2012 г., 12:32
открытый класс A3 {открытый статический void main (String str []) {байт b = 1; б ++; // строка 2 System.out.println (b); б = (байт) Ь + 1; // строка 3 System.out.println (b); }}
 Praveen19 нояб. 2012 г., 12:38
НЕТ, это не компиляция Вишала
 Praveen19 нояб. 2012 г., 12:38
@RohitJain I 'Я скомпилирую и посмотрю сейчас
 Praveen19 нояб. 2012 г., 12:41
@RohitJain, где ты находишь эти маленькие вещи ... Дай мне несколько советов, как делать хорошее программирование ???
 Rohit Jain19 нояб. 2012 г., 12:37
@ Вишал .. Это тоже не сработает. Потому что, даже если вы обратились1 в байтовое значение, результат операции между двумя байтовыми значениямиint, А потом опять та же причина.
 Vishal19 нояб. 2012 г., 12:44
@RohitJain это информация для меня ... Надеюсь, я мог вспомнить это .. Спасибо.
 Rohit Jain19 нояб. 2012 г., 13:04
@ Правин .. Конечно. Вы можете в любое время написать мне, когда у вас возникнут проблемы. Иначе ТАК всегда есть. Будьте на связи с SO, чтобы научиться лучше программировать, и да, наслаждайтесь кодированием. :)
 Rohit Jain19 нояб. 2012 г., 12:38
Да уж. Это не скомпилируется, по причине, которую я разместил в своем последнем комментарии.

Ваш ответ на вопрос