Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Как работает оператор умножения с присваиванием в Java? [дубликат]

#java #операторы


        
             
                
                    
                        
                            This question already has answers here:
                            
                        
                    
                
                        
                            Сложение 2 чисел типа short в Java
                                
                                    (2 ответа)
                                
                        
                                Закрыт 12 месяцев назад.
            
                    
Имеется тестовый кусок кода.    

public class Test {
    public static void main(String[] args) {
            int i = 2;
            char c = '1';
            c = (char) c * i; //ошибка компиляции
            System.out.println(c);
    }
}


Но

...
c *= i; //выводит b
...


Почему?
    


Ответы

Ответ 1



Если посмотреть в спецификацию то можно увидеть что E1 op= E2 эквивалентно E1 = (T) ((E1) op (E2)) где T это тип E1. Поэтому c *= i; из вашего примера эквивалентно c = (char)(c * i); В случае c = (char)c * i; проблема в том что оно парсится как c = ((char)c) * i; и когда мы умножаем ((char)c) на i результат расширяется до int.

Комментариев нет:

Отправить комментарий