При изучении в 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?
Строковые литералы (константы типа 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) в примитивный числовой тип, иначе генерируется ошибка времени компиляции.
При выполнении операции сложения оба операнда должны быть int
, и результат тоже получается int
, после его получения значение преобразуется в String
(здесь ссылка на print), потом печатается на экран.
Операция конкатенации выполняется если один из операндов имеет тип String
.
Вот здесь правильный перевод документации JLS-15.18(спасибо Гугл):
Если тип любого из операндов оператора + - String, то операция - конкатенация строк.
В противном случае тип каждого из операндов оператора + должен быть типом, который можно преобразовать (§5.1.8) в примитивный числовой тип, иначе произойдет ошибка времени компиляции.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Перечитал много материала, задача о ранце не подходит, потому что значение нужно либо большее (с минимальной разницей), либо равное заданному...
Хочу прикрутить к андроид приложению авторизацию на сайт https://wspkbtu