Посмотрите здесь
Текущая реализация сохраняет массив целых объектов для всех целых чисел от -5 до 256, когда вы создаете int в этом диапазоне вы фактически просто возвращаете ссылку на существующий объект.
blockquote>
Нет, они не idenitical.
WideString
просто обертка для типа ActiveX/COM BSTR
. Вам нужен он при работе с со строками в ActiveX/COM.
String
в Delphi 2009 и позже является псевдонимом для UnicodeString
, который может содержать символы Unicode, точно так же, как BSTR
делает, но это не то же как WideString
. WideString
выделяется диспетчером памяти COM и не считаемая ссылка. UnicodeString
выделяется диспетчером памяти RTL и считаемая ссылка, точно так же, как AnsiString
.
необходимо использовать (Unicode)String
по мере возможности, и только использовать WideString
для взаимодействующего с COM, или контакт с библиотеками прежней версии, которые используют WideString
для поддержки Unicode.
Кажется, что ответ здесь :
наиболее разительная перемена в Delphi 2009 - то, что тип “string” является теперь псевдонимом для UnicodeString вместо AnsiString.
Еще одной важной вещью отметить является различие в производительности.
В Техническом описании Marco Cantu (упомянутый в ответе moodforaday) говорит:
"WideString был (и все еще), не считаемая ссылка, и чрезвычайно плохо с точки зрения производительности и гибкости (например, он использует средство выделения глобальной памяти Windows, а не собственный FastMM4)".
Почти каждое руководство по обновлению для Delphi 2009, который я видел, рекомендует преобразовать весь WideStrings в Строки.
См. данную статью Marco Cantu, который обрисовывает в общих чертах работы строки (т.е. UnicodeString) в Delphi 2009:
"Техническое описание: Delphi и Unicode"
http://dn.codegear.com/article/38980
В основном, это - то, что Roddy сказал, но берет 27 страниц для вдаваний в подробности.