Являются ли Character и char одним и тем же?

#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 в an Integer , a double в a Double и так далее. Если преобразование идет другим путем, это называется распаковкой.

Вот простейший пример автоматической упаковки:

 Character ch = 'a';