为什么这段代码
string str = 30 + 20 + 10 + "ddd";
Console.WriteLine(str);
生成60ddd
,
和这一个
string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);
生成ddd302010
?
似乎很简单,但我无法理解它。 请告诉我可以去的方向,以便找到详细的答案。
谢谢!
答案 0 :(得分:11)
您显示的表达式中的+
运算符具有相同的优先级,因为它们是相同的运算符,因此从左到右进行求值:
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"
答案 1 :(得分:2)
这是因为从左侧到右侧评估表达式。在第一个例子中,30 + 20 + 10给你int + string(30 + 20 + 10) - int,“ddd” - string。在第二个例子中,“ddd”+ 30是一个字符串“ddd30”,它向它添加“20”和“10”。这完全取决于订单(除非你有禁忌)。
答案 2 :(得分:1)
操作员+有不同的重载:
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”这是整数+字符串操作本例中的运算符输出字符串所以60 +“ddd”将输出 60ddd 强>
在以下表达式中:
string str = "ddd" + 30 + 20 + 10;
Console.WriteLine(str);
首先“ddd”+ 30 评估了哪个字符串+整数操作发生,因此输出将 ddd30 。
然后 ddd30 + 20 将被评估,其中再次发生字符串+整数操作,因此输出将 ddd3020 。
然后 ddd3020 + 10 将被评估,其中再次进行字符串+整数运算,因此输出将为 ddd302010 。
答案 3 :(得分:1)
从左到右进行评估。第一个示例首先包含数字,因此它首先评估为数字。然后它发现它必须评估为字符串。第二个例子是另一种方式。它以字符串开头,并以字符串继续。
答案 4 :(得分:0)
这是因为从左到右的操作顺序。但是,分配是最后的操作。 为了确定价值,必须首先计算表达式。