c# string 如何计算它自己的值?
How does c# string evaluates its own value?
为什么这段代码
string str = 30 + 20 + 10 + "ddd";
Console.WriteLine(str);
产生 60ddd
,
还有这个
string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);
产生 ddd302010
?
看似很简单,但我就是想不通。
请告诉我方向,以便找到详细的答案。
谢谢!
这是因为表达式是从左到右求值的。在第一个例子中,30 + 20 + 10 给你 int + string (30 + 20 + 10) - int, "ddd" - string。在第二个示例中,"ddd" + 30 是一个字符串 "ddd30",它附加了“20”和“10”。一切都与顺序有关(除非您有括号)。
运算符 + 有不同的重载:
int + int = int
int + string = string
string + int = string
在以下表达式中:
string str = 30 + 20 + 10 + "ddd";
Console.WriteLine(str);
首先 30 + 20 得到的评估都是整数,因此运算符的输出将是整数,即 50.
然后 50 + 10 将被评估,它们都是整数,所以整数将被输出,即 60.
然后60 + "ddd" 即integer + string 操作运算符在这种情况下输出字符串 so 60 + "ddd"将输出 60ddd.
在以下表达式中:
string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);
首先 "ddd" + 30 得到了评估,其中字符串 + 整数运算发生,因此输出将是 ddd30.
然后 ddd30 + 20 将得到评估,其中再次进行字符串 + 整数运算,因此输出将是 ddd3020.
然后 ddd3020 + 10 将得到评估,其中再次进行字符串 + 整数运算,因此输出将是 ddd302010.
这是因为,操作顺序是从左到右。但是赋值是最后一个操作。
要赋值,首先必须计算表达式。
它是从左到右计算的。第一个示例首先是数字,因此它首先评估为数字。然后它发现它必须评估为字符串。第二个例子是相反的。它以字符串开头并以字符串继续。
您显示的表达式中的 +
运算符具有相同的优先级,因为它们是相同的运算符,因此从左到右计算:
30 + 20 + 10 + "ddd"
-- + (int, int) returns (int)50
------- + (int, int) returns (int)60
------------ + (object, string) returns (string)"60ddd"
那么另一种情况:
"ddd" + 30 + 20 + 10
----- + (string, object) returns (string)"ddd30"
---------- + (string, object) returns (string)"ddd3020"
--------------- + (string, object) returns (string)"ddd302010"
为什么这段代码
string str = 30 + 20 + 10 + "ddd";
Console.WriteLine(str);
产生 60ddd
,
还有这个
string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);
产生 ddd302010
?
看似很简单,但我就是想不通。 请告诉我方向,以便找到详细的答案。
谢谢!
这是因为表达式是从左到右求值的。在第一个例子中,30 + 20 + 10 给你 int + string (30 + 20 + 10) - int, "ddd" - string。在第二个示例中,"ddd" + 30 是一个字符串 "ddd30",它附加了“20”和“10”。一切都与顺序有关(除非您有括号)。
运算符 + 有不同的重载:
int + int = int
int + string = string
string + int = string
在以下表达式中:
string str = 30 + 20 + 10 + "ddd";
Console.WriteLine(str);
首先 30 + 20 得到的评估都是整数,因此运算符的输出将是整数,即 50.
然后 50 + 10 将被评估,它们都是整数,所以整数将被输出,即 60.
然后60 + "ddd" 即integer + string 操作运算符在这种情况下输出字符串 so 60 + "ddd"将输出 60ddd.
在以下表达式中:
string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);
首先 "ddd" + 30 得到了评估,其中字符串 + 整数运算发生,因此输出将是 ddd30.
然后 ddd30 + 20 将得到评估,其中再次进行字符串 + 整数运算,因此输出将是 ddd3020.
然后 ddd3020 + 10 将得到评估,其中再次进行字符串 + 整数运算,因此输出将是 ddd302010.
这是因为,操作顺序是从左到右。但是赋值是最后一个操作。 要赋值,首先必须计算表达式。
它是从左到右计算的。第一个示例首先是数字,因此它首先评估为数字。然后它发现它必须评估为字符串。第二个例子是相反的。它以字符串开头并以字符串继续。
您显示的表达式中的 +
运算符具有相同的优先级,因为它们是相同的运算符,因此从左到右计算:
30 + 20 + 10 + "ddd"
-- + (int, int) returns (int)50
------- + (int, int) returns (int)60
------------ + (object, string) returns (string)"60ddd"
那么另一种情况:
"ddd" + 30 + 20 + 10
----- + (string, object) returns (string)"ddd30"
---------- + (string, object) returns (string)"ddd3020"
--------------- + (string, object) returns (string)"ddd302010"