Вот маленький пример кода, угадайте что будет на выходе?

public class Test
{
    public static void main(String[] args)
    {
        System.out.print("Y" + "O");
        System.out.print('L' + 'O');
    }
}

Наверняка вы подумали, что получиться YOLO.

Что получится на самом деле: YO155.

Почему на выходи получается такое значение:

Когда вы используете двойные кавычки, текст  внутри кавычек будет определен как String и в таком случае выводом программы будет YO. Однако, когда вы используете одинарные кавычки, символы конвертируются в int. Это называется расширение примитивного типа в Java. После преобразований в тип int, будут выведены числа (‘L’ как 76 и ‘O’ как 79) и при сложении этих числе получится 155.

А теперь попробуйте отгадать что будет являться результатом выполнения этой программы:

public class Test 
{
    public static void main(String[] args) 
    {
        System.out.print("Y" + "O");
        System.out.print('L');
        System.out.print('O');
    }
}

В этот раз будет: YOLO

Пояснение:

В этот раз выводом будет YOLO вместо YO7679. Это произойдет потому что преобразование примитивных типов в озникает при использовании математических операций, например ‘Y’ + ‘O’.

Расширение примитивных типов происходит по следующим правилам:

  • Если один из операндов является  double,  другой конвертируется в double.
  • Если один из операндов float, то другой конвертируется во float.
  • Если один из операндов long, то второй конвертируется в long.
  • Иначе оба операнда будут преобразованы в тип int.

Документация от Oracle

Эта статья является переводом этой статьи.