আশ্চর্যজনকভাবে, এটি নির্ভর করে।
আপনি যদি কোনও পদ্ধতিতে এটি করেন:
void Foo() {
String one = "1";
String two = "2";
String result = one + two + "34";
Console.Out.WriteLine(result);
}
তারপরে String.Concat
সংকলকটি @ জোয়াচিম জবাব (+1 তার কাছে বিটিডাব্লু) হিসাবে কোডটি নির্গত করে বলে মনে হচ্ছে ।
যদি আপনি এগুলি স্থির হিসাবে সংজ্ঞায়িত করেন , যেমন:
const String one = "1";
const String two = "2";
const String result = one + two + "34";
বা আক্ষরিক হিসাবে, মূল প্রশ্নের মতো:
String result = "1" + "2" + "3" + "4";
তারপরে সংকলক সেই +
চিহ্নগুলিকে অপ্টিমাইজ করবে । এটি এর সমতুল্য:
const String result = "1234";
তদ্ব্যতীত, সংকলক বহিরাগত ধ্রুবক অভিব্যক্তিগুলি সরিয়ে ফেলবে এবং কেবলমাত্র সেগুলি ব্যবহার বা প্রকাশিত হলে তা নির্গত করে। উদাহরণস্বরূপ, এই প্রোগ্রাম:
const String one = "1";
const String two = "1";
const String result = one + two + "34";
public static void main(string[] args) {
Console.Out.WriteLine(result);
}
কেবল একটি স্ট্রিং তৈরি করে - ধ্রুবক result
("1234" এর সমান)। one
এবং two
ফলাফল আইএল প্রদর্শিত হবে না।
মনে রাখবেন রানটাইমে আরও অনুকূলিতকরণ হতে পারে। আমি শুধু আইএল উত্পাদন করে যাচ্ছি।
অবশেষে, ইন্টার্নিংয়ের ক্ষেত্রে, ধ্রুবক এবং আক্ষরিক ইন্টার্ন করা হয়, তবে যে মানটি অভ্যন্তরীণ হয় তা হ'ল আক্ষরিক নয়, আইএলে ফলস্বরূপ স্থির মান। এর অর্থ হ'ল আপনি প্রত্যাশার চেয়ে আরও কম স্ট্রিং অবজেক্ট পেতে পারেন, যেহেতু একাধিক অভিন্ন-সংজ্ঞায়িত ধ্রুবক বা আক্ষরিকাগুলি আসলে একই বস্তু হবে! এটি নিম্নলিখিত দ্বারা চিত্রিত:
public class Program
{
private const String one = "1";
private const String two = "2";
private const String RESULT = one + two + "34";
static String MakeIt()
{
return "1" + "2" + "3" + "4";
}
static void Main(string[] args)
{
string result = "1" + "2" + "34";
// Prints "True"
Console.Out.WriteLine(Object.ReferenceEquals(result, MakeIt()));
// Prints "True" also
Console.Out.WriteLine(Object.ReferenceEquals(result, RESULT));
Console.ReadKey();
}
}
যে ক্ষেত্রে স্ট্রিংগুলি লুপে (বা অন্যথায় গতিশীলভাবে) সংমিশ্রিত হয়, আপনি প্রতিযোগিতা প্রতি এক অতিরিক্ত স্ট্রিং দিয়ে শেষ করেন। উদাহরণস্বরূপ, নিম্নলিখিতগুলি 12 টি স্ট্রিং দৃষ্টান্ত তৈরি করে: 2 টি ধ্রুবক + 10 পুনরাবৃত্তি, যার ফলে প্রতিটি নতুন স্ট্রিংয়ের উদাহরণ দেয়:
public class Program
{
static void Main(string[] args)
{
string result = "";
for (int i = 0; i < 10; i++)
result += "a";
Console.ReadKey();
}
}
তবে (এছাড়াও আশ্চর্যরূপে), একাধিক পর পরের যুক্তিগুলি সংকলক দ্বারা একক একাধিক স্ট্রিং সংমিশ্রণে একত্রিত হয়। উদাহরণস্বরূপ, এই প্রোগ্রামটি কেবলমাত্র 12 টি স্ট্রিং উদাহরণ তৈরি করে! এটি কারণ " যদি আপনি এক বিবৃতিতে বেশ কয়েকটি + অপারেটর ব্যবহার করেন তবে স্ট্রিং সামগ্রীটি একবারে অনুলিপি করা হয়। "
public class Program
{
static void Main(string[] args)
{
string result = "";
for (int i = 0; i < 10; i++)
result += "a" + result;
Console.ReadKey();
}
}