#java
При изучении в java цикла for написала простой цикл, который должен выводить все четные числа до 100 и оставлять между ними строку. Я нашла в итоге ответ, что надо было ставить двойные кавычки, вместо одинарных и то, что я задумала, у меня в итоге получилось. Но я так и не поняла, что происходит в этом случае: for(int i = 2; i <= 100; i=i+2)
System.out.println(i+'\n'); Я прочитала, что тут происходит конкатенация, но совершенно не могу понять что с чем, если в ответе: 12 14 16 18 20 etc Почему возвращаются цифры с 12?
Ответы
Ответ 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) в примитивный числовой тип, иначе генерируется ошибка времени компиляции.Ответ 2
При выполнении операции сложения оба операнда должны быть int, и результат тоже получается int, после его получения значение преобразуется в String (здесь ссылка на print), потом печатается на экран. Операция конкатенации выполняется если один из операндов имеет тип String. Вот здесь правильный перевод документации JLS-15.18(спасибо Гугл): Если тип любого из операндов оператора + - String, то операция - конкатенация строк. В противном случае тип каждого из операндов оператора + должен быть типом, который можно преобразовать (§5.1.8) в примитивный числовой тип, иначе произойдет ошибка времени компиляции.
Комментариев нет:
Отправить комментарий