最近面试的时候考官问起来这个,当时回答不出来,光知道比字符串拼接性能好,但是具体的原因不知道。回来翻看红转头,原来stringbuilder有个缓冲区,一般当追加新字符串时不再需要申请内存,直接写到缓冲区,而字符串拼接没做一次拼接都要申请至少两次内存,拼接前两个字符串都要申请独立的内存地址,拼接完了,新的字符串还要申请地址,这样就产生了三次的内存申请,在数据库中涉及到物力资源申请切换的成本都先对高点。而stringbuilder就相对申请内存的频率要大大地低不少,到缓冲区被填满或不够用时,crl会根据特定算法来申请缓冲区的大小来减少内存的申请频率。