Возможно, это не то, что вы хотите, но я бы все равно использовал String. У меня была такая же ситуация в прошлом, и я обнаружил, что использование String по-прежнему обеспечивает все, что мне нужно. Вы можете создать свой собственный специальный объект с членом String, а затем управлять доступом через методы получения и установки, чтобы убедиться, что назначен только один символ.
Технически, вы можете использовать int (и я это делал в прошлом) для хранения одного символа или массива битов. Однако нет «истинных» примитивов, которые вы хотите использовать для символа.