如果字符串是引用类型,为什么在这种情况下 strA 的值没有改变?
If string is a reference type, why is strA's value not changing in this case?
我以为我理解了引用类型和值类型之间的区别。我认为
'string' 只有值类型 语义 同时保留了引用类型的行为。然后我尝试了这个,希望在两种情况下都能看到 True 返回。
我误会了什么?
string strA = "AAA";
string strB = strA;
strB = "BBB";
Console.WriteLine($"strA is {strA} and strB is {strB}");
Console.WriteLine($"The statement: strA == strA is {strA == strB} \n");
Car car1 = new Car();
car1.Horsepower = 190;
Car car2 = car1;
car2.Horsepower = 200;
Console.WriteLine($"car1.Horsepower is {car1.Horsepower} and car2.Horsepower is {car2.Horsepower}");
Console.WriteLine($"The statement: car1 == car2 is {car1 == car2}");
输出:
strA is AAA and strB is BBB
The statement: strA == strA is False
car1.Horsepower is 200 and car2.Horsepower is 200
The statement: car1 == car2 is True
字符串文字指定字符串实例。将字符串转换为汽车以方便使用,这基本上就是您使用字符串所做的事情:
Car AAA = new Car();
Car BBB = new Car();
Car carA = AAA;
Car carB = carA;
carB = BBB;
Console.WriteLine($"carA is {carA} and carB is {carB}");
Console.WriteLine($"The statement: carA == carB is {carA == carB}
最大的区别在于您使用 "string literals"
而不是 new Car
/new String
,因为编译器会为静态字符串预先分配对象。
我以为我理解了引用类型和值类型之间的区别。我认为 'string' 只有值类型 语义 同时保留了引用类型的行为。然后我尝试了这个,希望在两种情况下都能看到 True 返回。 我误会了什么?
string strA = "AAA";
string strB = strA;
strB = "BBB";
Console.WriteLine($"strA is {strA} and strB is {strB}");
Console.WriteLine($"The statement: strA == strA is {strA == strB} \n");
Car car1 = new Car();
car1.Horsepower = 190;
Car car2 = car1;
car2.Horsepower = 200;
Console.WriteLine($"car1.Horsepower is {car1.Horsepower} and car2.Horsepower is {car2.Horsepower}");
Console.WriteLine($"The statement: car1 == car2 is {car1 == car2}");
输出:
strA is AAA and strB is BBB
The statement: strA == strA is False
car1.Horsepower is 200 and car2.Horsepower is 200
The statement: car1 == car2 is True
字符串文字指定字符串实例。将字符串转换为汽车以方便使用,这基本上就是您使用字符串所做的事情:
Car AAA = new Car();
Car BBB = new Car();
Car carA = AAA;
Car carB = carA;
carB = BBB;
Console.WriteLine($"carA is {carA} and carB is {carB}");
Console.WriteLine($"The statement: carA == carB is {carA == carB}
最大的区别在于您使用 "string literals"
而不是 new Car
/new String
,因为编译器会为静态字符串预先分配对象。