Я вижу четыре альтернативы для преобразования char
в Stirng
в Java.Быстрое преобразование символов в Java
v = Something.lookup(new String((char)binaryData[idx])); // SORRY! Wrong.
v = Something.lookup("" + (char)binaryData[idx]);
v = Something.lookup(String.valueOf((char)binaryData[idx]));
v = Something.lookup(Character.toString((char)binaryData[idx])));
Я думаю, что первое является самым медленным. Второй очень удобен. Я предполагаю, что третий может вернуть ранее созданный экземпляр String
, но я не уверен, и документация API не говорит об этом. То же самое относится к четвертому варианту. Это повторное использование экземпляра было бы очень удачным, потому что тогда хэш-поиск мог использовать кеширование hashCode()
в String
. (Эта функция также не описана в документации API, но многие люди мне сказали.)
Я иду с C++, и я чувствую, что эта информация о недостаточной сложности информации вызывает беспокойство. :-) Правильны ли мои предположения? Есть ли у нас какая-либо официальная документация, в которой объявлены гарантии производительности и объявлены механизмы кэширования?
«Второе очень удобно» - нет, если вы пытаетесь прочитать код, ИМО. В коде используется конкатенация строк и пустая строка, ни одна из которых не является частью того, что вы действительно хотите достичь. 'String.valueOf', IMO - и вы * измерили * любой из них? Знаете ли вы, что это действительно узкое место в вашем коде? Вы пытались определить, кэширует ли значение 'String.valueof' * *? (Это легко понять ...) Предполагая, что 'binaryData' является' byte [] ', вы можете легко построить свой собственный' String [] 'с 256 строками в любом случае, чтобы полностью гарантировать кеширование ... –
3 и 4 являются то же самое .. 4 принудительно вызывает 3 :). Кроме того, у нас нет конструктора String, который принимает один символ (case-1?) – TheLostMind
. Версия 2 будет переводиться компилятором в: создание объекта StringBuilder, к которому затем добавляется ваш символ, наконец, toString() будет вызываться. Так что это довольно дорого. За стоимость v3 или v4 ... вы могли бы взглянуть на источник и посмотреть, что там происходит. – GhostCat