Sobes.tech
Junior

Дар Java, фарқият байни StringBuilder ва StringBuffer чист?

sobes.tech AI

Ҷавоб аз AI

Асосӣ фарқ он аст, ки StringBuffer бехатар барои сӯзишворӣ аст, дар ҳоле ки StringBuilder не.

  • StringBuffer: Ҳамаи усулҳои он синхронӣ шудаанд (synchronized). Ин бехатариро ҳангоми кор бо чанд сӯзишворӣ ҳамзамон таъмин мекунад, бо кафолат додани он, ки танҳо як сӯзишворӣ метавонад дар як вақт усулро иҷро кунад. Аммо, ин инчунин ба кам шудани самаранокӣ бо сабаби хароҷоти синхронӣ оварда мерасонад.

  • StringBuilder: Усулҳо синхронӣ нашудаанд. Ин онро нисбат ба StringBuffer дар муҳити як сӯзишворӣ тезтар мекунад. Вақте ки StringBuilder аз ҷониби чанд сӯзишворӣ бе синхронизатсияи беруна истифода мешавад, натиҷаҳои нодуруст метавонанд ба вуҷуд оянд, зеро амалҳо метавонанд дар байни ҳам гузаранд.

Вақте истифода бурдан:

  • StringBuilder-ро дар барномаҳои як сӯзишворӣ ё вақте ки бехатарии сӯзишворӣ дар сатҳи баландтар таъмин карда мешавад, истифода баред. Он тезтар аст.
  • StringBuffer-ро дар барномаҳои бисёрсӯзишворӣ истифода баред, ки дар он чанд сӯзишворӣ метавонанд ҳамзамон як объектро тағир диҳанд, ва ба бехатарии дохилии сӯзишворӣ ниёз доранд.

Масалан:

// StringBuilder дар муҳити як сӯзишворӣ (тарҷиб)
StringBuilder sb = new StringBuilder();
sb.append("Салом").append(" ").append("Дунё");
System.out.println(sb.toString()); // Натиҷа "Салом Дунё" хоҳад буд

// StringBuffer дар муҳити бисёрсӯзишворӣ (бехатартар дар дастрасии ҳамзамон)
StringBuffer sbf = new StringBuffer();
// Дар сценарои воқеии бисёрсӯзишворӣ, сӯзишворҳо ба sbf дастрасӣ хоҳанд дошт
sbf.append("Сӯзишворӣ ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // Натиҷа монанд ба "Сӯзишворӣ 1" ё "Сӯзишворӣ 2" вобаста ба сӯзишворӣ