Явное приведение типов к переполнению байтов - PullRequest
1 голос
/ 27 марта 2020
public class {
    public static void main(String[] args) {
        // Explicit Type Conversion
        long t = 70;
        t= (byte) t * 2;
        System.out.println("Manual conversion"+t);
    }
}

Вывод: - Ручное преобразование 140

Здесь я получаю вывод 140, но почему? Потому что, поскольку байт колеблется от -128 до 127, почему я получаю 140, а его больше, чем 127, оно превышает!

Ответы [ 2 ]

1 голос
/ 27 марта 2020

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

t=(byte)(t*2)
1 голос
/ 27 марта 2020

Давайте рассмотрим выражение t=(byte)t*2. У вас есть byte (поскольку вы явно его разыгрываете), умноженное на int (буквальное). Левый операнд переводится в int для выполнения умножения, поэтому 140 является допустимым значением там. Затем он повышается до long и присваивается обратно t.

...