int + '\n' - что происходит при таком условии?

112
18 ноября 2019, 12:40

При изучении в java цикла for написала простой цикл, который должен выводить все четные числа до 100 и оставлять между ними строку. Я нашла в итоге ответ, что надо было ставить двойные кавычки, вместо одинарных и то, что я задумала, у меня в итоге получилось. Но я так и не поняла, что происходит в этом случае:

for(int i = 2; i <= 100; i=i+2)<br>
            System.out.println(i+'\n');

Я прочитала, что тут происходит конкатенация, но совершенно не могу понять что с чем, если в ответе:

12  
14  
16  
18  
20  

etc
Почему возвращаются цифры с 12?

Answer 1

Двойные кавычки

Строковые литералы (константы типа String) заключаются в двойные кавычки:

String s = "a"; //это строка

Оператор + в котором участвует строка и другой объект/примитивное значение приводят к конкатенации:

String newString = 1+"a"; //1a

Одинарные кавычки

Символьные литералы (константы типа char) заключаются в одинарные кавычки:

char ch = 'a';

Тип char, в отличие от String — целочисленный тип (JLS §4.2.1) это означает, что каждый символ представляет собой числовое значение символа в кодировке UTF-16. Как следствие, char можно привести к числу:

System.out.println((int) 'a');  //97
System.out.println((int) '\n'); //10

Оператор + для char также работает по-другому, при сложении (i+'\n') конкатенации не происходит, просто прибавляется числовое значение символа \n, а именно 10

Оператор +

Поведение оператора + описывается в спецификации Java (§15.18 Additive Operators):

If the type of either operand of a + operator is String, then the operation is string concatenation.
Otherwise, the type of each of the operands of the + operator must be a type that is convertible (§5.1.8) to a primitive numeric type, or a compile-time error occurs.

Если один из операндов имеет тип String, то операция представляет собой конкатенацию строк.
В противном случае тип каждого операнда оператора + должен быть преобразуемым (§5.1.8) в примитивный числовой тип, иначе генерируется ошибка времени компиляции.

Answer 2

При выполнении операции сложения оба операнда должны быть int, и результат тоже получается int, после его получения значение преобразуется в String (здесь ссылка на print), потом печатается на экран.

Операция конкатенации выполняется если один из операндов имеет тип String.

Вот здесь правильный перевод документации JLS-15.18(спасибо Гугл):

Если тип любого из операндов оператора + - String, то операция - конкатенация строк.

В противном случае тип каждого из операндов оператора + должен быть типом, который можно преобразовать (§5.1.8) в примитивный числовой тип, иначе произойдет ошибка времени компиляции.

READ ALSO
Подбор чисел из массива с суммой большей или равной К

Подбор чисел из массива с суммой большей или равной К

Перечитал много материала, задача о ранце не подходит, потому что значение нужно либо большее (с минимальной разницей), либо равное заданному...

134
Сохранение файлов программы (Java, Android) [дубликат]

Сохранение файлов программы (Java, Android) [дубликат]

На данный вопрос уже ответили:

135
Как сохранить вложенную запись из JSON в SQLite?

Как сохранить вложенную запись из JSON в SQLite?

Я получаю данные в таком виде:

160
Отправить POST запрос на сайт в котором нет form

Отправить POST запрос на сайт в котором нет form

Хочу прикрутить к андроид приложению авторизацию на сайт https://wspkbtu

151