#java #char #character
#java #символ
Вопрос:
У меня есть карта. Map<Character, Integer> map1 = new TreeMap<Character, Integer>();
Я использую эту карту для хранения уникальных символов, с которыми я сталкиваюсь при сканировании файла. Я получаю String
и использую String.toCharArray()
для хранения символов, найденных в char
массиве.
Если я попытаюсь поместить элемент из моего массива char, скажем map1.put(charay[I], 1)
, будет ли карта интерпретировать это как класс-оболочку? Или character
они и char
разные. Я проводил некоторое исследование, и похоже, что вы используете классы-оболочки, когда примитивные типы данных не будут работать (например, в map), но будет ли то, что я делаю, работать?
Комментарии:
1. автобоксинг docs.oracle.com/javase/tutorial/java/data/autoboxing.html
2.
Character
является ли класс-оболочка примитивнымchar
. Он предоставляет методы и позволяет использовать их в структурах данных, таких как карты, списки и т. Д. Они могут использоваться взаимозаменяемо с автоматической упаковкой и распаковкой.3. Это именно то, что я надеялся услышать!
Ответ №1:
Character и char — это не одно и то же, первый — это класс, а второй — примитивный тип, хотя, как вы говорите, класс можно рассматривать как предоставляющий представление экземпляра объекта «оболочка» примитивного типа в местах, где разрешены только объекты, а не примитивы.
В любом месте, где ваш код указывает, что должно произойти преобразование из одного в другое, вместо того, чтобы выдавать вам ошибку компилятора, вместо этого компилятор java (javac) вставит для вас свой собственный код, код, который выполнит преобразование за вас. Преобразование называется автоматической упаковкой и автоматической распаковкой, что эквивалентно выполнению Character.valueOf(char) и Character.charValue() . Кроме того, компилятор будет выполнять кэширование созданных символьных объектов, чтобы ограничить потребление памяти. Автобокс — это просто компилятор, вставляющий это преобразование и кэширующий код, чтобы ваш видимый код выглядел более чистым, но на самом деле это то, что происходит, просто компилятор вставляет дополнительный код.
Ответ №2:
ДА. Автоматическая блокировка по ссылке (обратите внимание на пример),
Автобоксинг — это автоматическое преобразование, которое компилятор Java выполняет между примитивными типами и соответствующими им классами-оболочками объектов. Например, преобразование an
int
в anInteger
, adouble
в aDouble
и так далее. Если преобразование идет другим путем, это называется распаковкой.Вот простейший пример автоматической упаковки:
Character ch = 'a';