جاوا میں ، اسٹرنگ ، اسٹرنگ بلڈر اور سٹرنگبفر میں کیا فرق ہے؟


جواب 1:

یہ سٹرنگ اور سٹرنگ بلڈر کے مابین درج ذیل فرق ہیں۔

عدم استحکام:

اسٹرنگ ناقابل تغیر ہے (تخلیق کے بعد ، اس میں ترمیم نہیں کی جاسکتی ہے)۔

آئیے اسٹرنگ کی مثال کے ذریعے دیکھیں:

سٹرنگ str = "ٹیکنیکل ڈائری"؛ str = str + "ریاستہائے متحدہ میں سب سے ابھرتا ہوا بلاگ"؛

ہم دیکھ سکتے ہیں کہ str کی قیمت کو "ٹیکنیکل ڈائری" سے "ریاستہائے متحدہ میں سب سے ابھرتے ہوئے بلاگ" میں تبدیل کر دیا گیا ہے۔ اس کی وجہ سے ، ایسا لگتا ہے کہ اسٹرنگ بدلنے والا ہے (قابل ترمیم) لیکن حقیقت یہ ہے کہ یہ ناقابل تغیر ہے (ایک بار پیدا ہوجانے کے بعد ، اس میں ترمیم نہیں کی جاسکتی ہے)۔ دراصل ، پہلے بیان میں کوئی شے اسٹرنگ لفاظی "ٹیکنیکل ڈائری" کا استعمال کرتے ہوئے تخلیق کیا جاتا ہے اور دوسرے بیان میں جب ہم نے متغیر کو "نئی ریاست کے سامنے آنے والا بلاگ" (ریاستہائے متحدہ میں سب سے زیادہ ابھرتا ہوا بلاگ) تفویض کیا۔ اس معاملے میں ، اس شے میں خود تبدیل نہیں ہوا کیوں کہ نئی سٹرنگ لِٹیکل ("ریاستہائے متحدہ میں ٹیکنیکل ڈائری سب سے زیادہ ابھرتا ہوا بلاگ") کا استعمال کرتے ہوئے ایک نئی شے تیار کی گئی تھی۔ اور اس کا حوالہ (نیا اعتراض) متغیر کی حد کو تفویض کیا جاتا ہے۔ لہذا ، دونوں سٹرنگ لٹریلز یا اشیاء مختلف حوالوں کے ساتھ موجود ہیں۔

سٹرنگ بلڈر مطابقت پذیر ہے (تخلیق کے بعد ، اس میں ترمیم کی جاسکتی ہے) ۔اسٹرنگ بلڈر کی مثال دیکھیں۔

سٹرنگ بلڈر str = نیا اسٹرنگ بلڈر ("ٹیکنیکل ڈائری")؛ Str. Append (": مائیکروسافٹ صارفین کا پہلا انتخاب")؛

مندرجہ بالا مثال میں ، ہم دیکھ سکتے ہیں کہ پہلے بیان میں کوئی شے اسٹرنگ لٹریبل "ٹیکنیکل ڈائری" کا استعمال کرتے ہوئے تخلیق کیا جاتا ہے۔ دوسرے بیان میں ، اعتراض کی قیمت کو "تکنیکی ڈائری" سے تبدیل کرکے "تکنیکی ڈائری: مائیکرو سافٹ صارفین کے پہلے انتخاب" میں تبدیل کردیا گیا ہے۔ تو یہاں اسٹرنگ کی طرح کوئی نیا اعتراض بنانے کے بجائے اس شے میں ترمیم کی گئی۔

کارکردگی:

اسٹرنگ بلڈر کو تاروں کو جوڑنے کے ل St ترجیح دی جاتی ہے کیونکہ یہ تیز تر ہوتا ہے۔ اسٹرنگ کے معاملے میں ، جب آپ ڈور کو متفق کرتے ہیں تو ، آپ واقعی میں ہر بار ایک نیا شبیہہ تشکیل دے رہے ہوتے ہیں کیونکہ یہ غیر منقول ہے اور اس کی وجہ سے یہ سٹرنگ بلڈر سے آہستہ ہوتا ہے۔

نظام کا استعمال کرتے ہوئے؛ System.Text کا استعمال کرتے ہوئے؛ نام کی جگہ سٹرنگ ویساسٹرنگ بلڈر {کلاس پروگرام {جامد باطل مین (سٹرنگ [] آرگس) {لمبی اسٹارٹ ٹائم = ڈیٹ ٹائم.نو۔ٹکس؛ سٹرنگکونکٹ ()؛ کنسول ڈاٹ رائٹ لائن ("اسٹرنگکونکاٹ کے لئے لیا گیا وقت:" + اسٹارٹائم = تاریخ وقت سٹرنگ بلڈر کونکٹ ()؛ کنسول.وائٹ لائن stat عوامی جامد اسٹرنگکونکاٹ () {سٹرنگ str = "ٹیکنیکل ڈائری"؛ کے لئے (INT 1 = 0؛ i <10000؛ i ++) {str = str + "ایس شریف"؛ str واپسی str؛ stat عوامی جامد اسٹرنگ بلڈر کنکٹ () {سٹرنگ بلڈر strBuilder = نئی اسٹرنگ بلڈر ("ٹیکنیکل ڈائری")؛ (INT i = 0؛ i <10000؛ i ++) for strBuilder.Append ("ایس شریف")؛ str واپسی strBuilder.ToString ()؛ }}}

آؤٹ پٹ:

مذکورہ تصویر میں ، آپ دیکھ سکتے ہیں کہ اسٹرنگ کے ذریعہ لیا گیا وقت 383.344 ملی میٹر ہے۔ اور اسی آپریشن کے وقت کے لئے جو سٹرنگ بلڈر نے لیا ہے 1.0009ms ہے۔ تو ، یہ ثابت کرتا ہے کہ سٹرنگ بلڈر اسٹرنگ سے تیز ہے۔

یہ میرے آخر سے ہے۔ اگر آپ مزید وضاحت چاہتے ہیں تو آپ میرے بلاگ کا حوالہ دے سکتے ہیں: اسٹرنگ اور سٹرنگ بلڈر کے درمیان کیا فرق ہے؟ . مبارک کوڈنگ…. :)


جواب 2:

بدلاؤ فرق:

ناقابل تغیر

بدلنے والا

تھریڈ سیفٹی فرق:

حالات:

  • اگر آپ کی سٹرنگ کسی اسٹرنگ کلاس کا استعمال نہیں کررہی ہے کیونکہ اسٹرنگ آبجیکٹ ناقابل تبدیل ہے۔ اگر آپ کی تار بدل سکتی ہے (مثال کے طور پر: سٹرنگ کی تعمیر میں بہت ساری منطق اور کام) اور صرف ایک ہی دھاگے تک رسائی حاصل کی جاسکے گی ، ایک سٹرنگ بلڈر کافی اچھا ہے۔ اگر آپ کی تار بدل سکتی ہے ، اور ایک سے زیادہ تھریڈز تک رسائی حاصل کی جاسکتی ہے تو ، اسٹرنگ بفر کا استعمال کریں کیونکہ سٹرنگ بوفر مطابقت پذیر ہے لہذا آپ کو تھریڈ سیفٹی حاصل ہے۔

جواب 3:

بدلاؤ فرق:

ناقابل تغیر

بدلنے والا

تھریڈ سیفٹی فرق:

حالات:

  • اگر آپ کی سٹرنگ کسی اسٹرنگ کلاس کا استعمال نہیں کررہی ہے کیونکہ اسٹرنگ آبجیکٹ ناقابل تبدیل ہے۔ اگر آپ کی تار بدل سکتی ہے (مثال کے طور پر: سٹرنگ کی تعمیر میں بہت ساری منطق اور کام) اور صرف ایک ہی دھاگے تک رسائی حاصل کی جاسکے گی ، ایک سٹرنگ بلڈر کافی اچھا ہے۔ اگر آپ کی تار بدل سکتی ہے ، اور ایک سے زیادہ تھریڈز تک رسائی حاصل کی جاسکتی ہے تو ، اسٹرنگ بفر کا استعمال کریں کیونکہ سٹرنگ بوفر مطابقت پذیر ہے لہذا آپ کو تھریڈ سیفٹی حاصل ہے۔