Kaç Dize nesneleri bir artı işareti kullanılarak oluşturulur?
Kaç Dize nesneleri kod aşağıda bir artı işareti kullanılarak oluşturulur?
String result = "1" "2" "3" "4";
Eğer aşağıda olsaydı, üç Dize nesneleri derdim: "1", "2", "12".
String result = "1" "2";
Ben de String nesneleri performans geliştirme için Dize Stajyer Havuzu/Tablosunda önbelleğe biliyor, ama mesele o değil.
CEVAP
Şaşırtıcı bir şekilde, duruma göre değişir.
Bir yöntem içinde:
void Foo() {
String one = "1";
String two = "2";
String result = one two "34";
Console.Out.WriteLine(result);
}
sonra derleyici kodu String.Concat
@Joachim cevap olarak ( onu 1 arada) yayarlar gibi görünüyor.
Onları olarak tanımlarsanızsabitlerörneğin:
const String one = "1";
const String two = "2";
const String result = one two "34";
ya gibihazırözgün söz konusu gibi
String result = "1" "2" "3" "4";
sonra derleyici hemen
bu işaretlerin optimize eder. Eşdeğer:
const String result = "1234";
Ayrıca, derleyici yabancı sabit ifade Kaldır ve sadece kullanılan ya da maruz kalan varsa onları çıkarır. Örneğin, bu program:
const String one = "1";
const String two = "1";
const String result = one two "34";
public static void main(string[] args) {
Console.Out.WriteLine(result);
}
Tek bir dize oluşturur - sürekli result
(eşit "1234"). one
two
elde edilen IL görünmüyor.
Zamanında fazla iyileştirmeler olabilir unutmayın. Sadece IL üretilir ne ile gideceğim.
Staj ile ilgili olarak son olarak, sabit ve değişmez değerler staj yaptım ama staj olduğu değeri IL sonuçlanan sabit değer, sabit değildir. Bu birden fazla aynı şekilde tanımlı sabitler veya harfleri aslında aynı nesne olacağından beklediğinizden daha az dize nesneleri almak olabilir anlamına gelir! Bu, aşağıdaki gibi gösterilmiştir:
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();
}
}
Dize bir döngü içinde birleştirilmiş durumda (veya başka bir dinamik olarak), birleştirme başına bir ekstra dize ile bitirmek. Örneğin, aşağıdaki 12 dize örneklerini oluşturur: 2 10 yineleme, yeni bir Dize örneği sonuç: Her sabitler
public class Program
{
static void Main(string[] args)
{
string result = "";
for (int i = 0; i < 10; i )
result = "a";
Console.ReadKey();
}
}
(Sürpriz bir şekilde) ancak, birden fazla üst üste birbirine bağlanması çok dizeli tek bir birleştirme içine derleyici tarafından birleştirilir. Örneğin, bu program da sadece 12 dize örneklerini üretiyor! Çünkü bu "Even if you use several operators in one statement, the string content is copied only once."
public class Program
{
static void Main(string[] args)
{
string result = "";
for (int i = 0; i < 10; i )
result = "a" result;
Console.ReadKey();
}
}
Nasıl C dize dizisi oluşturulur?...
Neden bir MD5 kabuk Python bir yankı k...
VB.NET dizeleri bitiştirmek için vs ar...
Fonksiyon adının önüne JavaScript artı...
Dize Dize başvurular bir koleksiyon Ne...