Разница между int и int, полученными ParseInt в Java

int i = 0;
int k = Integer.parseInt("12");
int j = k;
System.out.println(i+1 + " " + j+1);

Странно, но полученный результат

1 121

Я не могу понять эту принципиальную разницу. Пожалуйста, помогите мне.

Ответы на вопрос(9)

и в Java есть только один тип int. в этом примере вы использовали & quot; & quot ;, где java будет рассматривать его как строку. в любой операции убедитесь, что вы не путаете строки с вычислениями. Всегда используйте круглые скобки, чтобы отделить строку от вычислений.

" " Выражение после этого оценивается как строка.

Использование скобок( а также) вокруг выражения может решить проблему в руке.

System.out.println(i+1 + " " +, (j+1));

" ".

всякий раз, когда приходит строка, java не выполняет никаких вычислений после этого и просто добавляет ее как строку.

Так что в вашем случае,i+1 рассчитывается на1, но" " + j+1 имеет строку в нем. Таким образом, это просто добавлено вместе, чтобы сформировать121

 13 июн. 2012 г., 07:17
любые примитивы / обертки до появления первой строки вычисляются. Все, что после этого, просто добавляется вместе.
 13 июн. 2012 г., 07:18
@AurA: потому что это в основном означает что-то эквивалентное:" ".concat(j).concat(1) (или аналогичная версия с использованием StringBuilders, в зависимости от вашего кода и версии JVM). Он не может угадать, что вы хотите, так что это довольно естественная интерпретация слева направо.
 13 июн. 2012 г., 07:21
Нет .. это не похоже01 121... это концептуально(0+1) + " ".append(j).append(1)
 13 июн. 2012 г., 07:14
Но почему это не добавление в первом случае? Если это правда, это должно быть как 01 121
 13 июн. 2012 г., 07:20
@Kshitij спасибо за редактирование ответа не совсем понятно. хайлем спасибо за объяснение

что оператор + оставил ассоциативность и перегружен функцией со строками, поэтому, когда у вас есть это

int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1

это первые суммы i + 1 который дает 1, то это суммы1 + " ", который использует функцию перегрузки для объединения 1 и & quot; & Quot; таким образом, он дает строку со значением «1». После этого это суммы"1 " + j и так как один из операндов является строкой, он выполняет то же самое поведение и так далее.

по которой вы видите это поведение, состоит в том, что последовательность+ Операторы оцениваются слева направо. Таким образом, он оценивается как в скобках:

System.out.println((((i + 1) + " ") + j) + 1);

Первый оператор добавляет дваint ценит и производитint значение. Следующий+ добавляетint кString и производитString, После этого все является конкатенацией строк. Вы можете ввести свои собственные скобки, чтобы получить желаемый результат.

 13 июн. 2012 г., 08:01
Да +1, это действительно лучший ответ
 13 июн. 2012 г., 07:18
+1 за подробное объяснение. Лучший ответ.

который используется для преобразования типа String obj в примитивный тип данных (int). это обычно используется в работе фрейма сбора для преобразования примитивного типа данных в объект и наоборот

Решение Вопроса

System.out.println((i+1) + " " + (j+1));

Отдокументы

The + operator is syntactically left-associative, no matter whether it is later determined by type analysis to represent string concatenation or addition. In some cases care is required to get the desired result. For example, the expression:

a + b + c is always regarded as meaning: (a + b) + c

Расширяя это до вашего сценария

i+1 + " " + j+1

это становится

(((i + 1) + " ") + j)+1

посколькуi это инт так(i + 1) = 1 , простоaddition

" " этоString следовательно((i + 1) + " ") = 1 WITH SPACE (Stringconcatenation)

Точно так же, когдаj и последний1 добавляется, его добавляют кString следовательноString concatenation имеет место, что оправдывает вывод, который вы получаете.

See

JLS 15.18.1 String Concatenation Operator +
 13 июн. 2012 г., 07:19
Пожалуйста, также смотрите ссылку, которую я добавил в ответе
 sachinjain02413 июн. 2012 г., 07:15
Большое спасибо .. Не знаю, что ..
 13 июн. 2012 г., 07:16
Он просит разницу
 29 мар. 2018 г., 07:46
ссылка мертвый сэр, пожалуйста, исправьте
    int i = 0;
    int k = Integer.parseInt("12");
    int j = k;
    System.out.println(i+1 + " " + (j+1));

& Quot; + после этого Java просто добавляет значения в виде строки.

и когда вы помещаете (j + 1) в скобки, его приоритет становится выше, и он сначала выполняет его и выполняет операцию суммирования.

+ Оператор перегружен для сложения и конкатенации строк. То, что вы делаете, это конкатенация строк, а не сложение. Используйте скобки для выполнения сложения.

Ваш ответ на вопрос