Помогите прочитать код

Не могу понять почему так:

class Puzzle {
  private static boolean condition;

  public static void main(String[] args) {

    String answer = "Какое самое главное число во вселенной?";

    byte initialSum = 120;
    short additionalSum = 31999;
    int secretSum = 162;

    byte number = (byte) (initialSum * additionalSum + secretSum);

    if (!condition) {
      answer = "Ответ на главный вопрос жизни, вселенной и всего такого: ";
      System.out.println(answer + number);
    } else {
      System.out.println(answer);
    }
 


//Ответ на главный вопрос жизни, вселенной и всего такого: 42 

Я новичок и просто не могу додуматься почему 42:)


Ответы (2 шт):

Автор решения: Serge3leo

Потому что преобразование к byte берёт младшие 8 бит, грубо говоря, вычисляет значение по модулю 256, и condition гарантировано инициализируются false.

Это если вопрос не за то, почему именно 42. (Да, у Вас закрывающая фигурная скобочка - отклеилась!)

→ Ссылка
Автор решения: kami

Явное приведении простых типов

Основной код - byte number = (byte) (initialSum * additionalSum + secretSum); будет выполняться в следующем порядке:

  1. "Выравнивание" типов параметров (xxxSum) до int, как наиболее "толстого" из них.
  2. Вычисление выражения: 120 * 31999 + 162 = 3 840 042 в десятичной или 3A 98 2A в шестнадцатиричной системе счисления
  3. Явное приведение int к byte, в результате от 32 бит (4 байт) остаётся только младший один байт, с содержимым 2A, что в переводе на десятичную будет 42.
  4. condition - boolean переменная, имеющая по умолчанию значение false
→ Ссылка