Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var s3 = " habra" + " habr";
var s3 = " habra" + "habr";
Для сравнения возьмем строки Java.
enum {_DEFAULT_SIZE = 4 * sizeof( void * )};
#if defined (_STLP_USE_SHORT_STRING_OPTIM)
union _Buffers {
_Tp* _M_end_of_storage;
_Tp _M_static_buf[_DEFAULT_SIZE];
} _M_buffers;
#else
_Tp* _M_end_of_storage;
#endif
Использование неизменных строк ведет к снижению нагрузки на память, так как нет необходимости хранить 2 экземпляра одной строки. В таком случае и памяти меньше расходуется, и сравнение происходит быстрее, так как требует сравнение лишь ссылок
они неизменяемы и их сравнение происходит по значению, а не по ссылкам
A hash function must have the following properties:
If two objects compare as equal, the GetHashCode method for each object must return the same value.
string str1 = "habr";
string str2 = "habr";
Console.WriteLine(str1 == str2);
public static bool operator ==(string a, string b) Member of System.String
Осталось вспомнить, что каждый символ в строке находится в UTF -16 кодировке значит, занимает так же 2 байта, следовательно
если вы сериализуете полученную подстроку стандартными средствами и передаете её по сети, то будет сериализован весь оригинальный массив и количество передаваемых байтов по сети будет большимИзвините, но это полный бред. Больше похоже на грязную рекламу типа: посмотрите как в яве отстойно и как в донете круто. В Sun/Oracle не настолько тупые люди работают, чтобы не предусмотреть специальный случай для сериализации строк. Разве так сложно это проверить 5-ю строчками кода, перед тем как писать в статье?
Мой вывод был сделан на основании реализации метода substring который до последней версии возвращал ссылку на текущий массив символов.Ну нельзя же на основе только метода substring делать вывод о сериализации! Это как-то глупо. Разве не логично глянуть реализацию сериализации? Ну или хотя бы просто проверить.
Особенности строк в .NET