У меня есть задание для школы, и одна из задач - объяснить множество крошечных вычислений и объяснить, почему Java дает вам результат, который он дает вам.
и один из расчетов:
1 + '2' + 3
который для меня дает лексическую ошибку, поскольку учитель использовал неправильные "апострофы" для моей системы, но я говорил с другими студентами, и они сказали мне, что они получили фактический результат, поэтому я начал читать об этом и узнал что он должен обозначать переменную char, и я также узнал о типах системы, поэтому я изменил знаки для работы в моей системе, и теперь я получаю ответ 54..
и я не вижу в ней логики, и я попытался добавить/вычислить/математику google с переменными char и не нашел ничего, что объясняет это хорошо..
Поэтому я обращаюсь к вам, людям с кодированием, что однажды я мог бы помочь мне понять логику этого.
это началось как домашнее задание, которое, вероятно, я мог бы получить, просто ответив, что он дает лексическую ошибку, потому что мой компилятор не понимает символ, но теперь он достиг своего пика моего любопытства, и я действительно хочу знать, как java справляется с получить этот ответ..
спасибо за любую помощь по этому вопросу! :)
Я вижу, что я не могу сделать тег "домашняя работа", поэтому надеюсь, что все в порядке, я положил его сюда :)
В Java char
имеет прямое сопоставление с int
UTF-16. Однако для большинства обычных символов приведение значения char
к int
приводит к его индексу в таблице ascii. +
- это не операция с символами, но это операция для int. Поэтому java берет 2
и, думая "я не могу добавить это", понимает, что он может добавить его, если он передает его в int.
Как видно из таблицы, "2" имеет индекс 50, таким образом, 1 + 50 + 3 = 54.
Символы - это, по сути, цифры. Компьютер преобразует символ в целое число с помощью набора символов (charset). Оболочки - это таблицы, которые связывают указанный символ с указанным целым числом, поэтому ваш компьютер может преобразовать его в двоичный код и сохранить его в памяти. Позже, когда это необходимо, это число может быть преобразовано обратно в характер. Ваш компилятор использует Unicode (надмножество ASCII, спасибо Tom Blodget), поэтому символ "2" на самом деле является десятичным целым числом 50 (подробнее: http://unicode-table.com/en/, обратите внимание, что таблица использует шестнадцатеричные числа, поэтому шестнадцатеричный 32 равен десятичному значению 50). Поскольку добавление по умолчанию возвращает целое число, символ преобразуется и добавляется, но никогда не преобразуется обратно в его исходную форму.
Что касается того, почему он дает ошибку, это, вероятно, потому, что Java отличается между типами и вашим компилятором (или тем, что бросает ошибку) является более строгим. Не верьте мне на слово, вам, вероятно, следует взглянуть на стандарт и вашу реализацию. В C, например, это дополнение всегда будет успешным.
Надеюсь, это немного облегчит ситуацию.