C# 在.net中,“的价值是什么?”;o";为什么?
在.NET中,“o”的价值是什么?为什么 我的想法是,对象的默认类型是值将适合的最低类型,因此答案将适合的最低/最低/最小对象是int32,这就是设置为基类的对象 这似乎正确吗?这就是所谓的整数除法。见: 当你除以两个整数时,结果总是一个整数。对于 例如,7/3的结果是2 此外,C#规格: 整数除法: 除法将结果四舍五入为零,并将 结果是可能的最大整数,该整数小于 两个操作数商的绝对值。结果是零 当两个操作数的符号相同且为零或时为正 两个操作数的符号相反时为负数 因此,向零舍入的结果为C# 在.net中,“的价值是什么?”;o";为什么?,c#,.net,C#,.net,在.NET中,“o”的价值是什么?为什么 我的想法是,对象的默认类型是值将适合的最低类型,因此答案将适合的最低/最低/最小对象是int32,这就是设置为基类的对象 这似乎正确吗?这就是所谓的整数除法。见: 当你除以两个整数时,结果总是一个整数。对于 例如,7/3的结果是2 此外,C#规格: 整数除法: 除法将结果四舍五入为零,并将 结果是可能的最大整数,该整数小于 两个操作数商的绝对值。结果是零 当两个操作数的符号相同且为零或时为正 两个操作数的符号相反时为负数 因此,向零舍入的结果为3/2提供
3/2
提供1
。如果要获取浮点数,则应使用浮点除法(即至少一个操作数应为浮点值):
“默认情况下”您将除以两个int32,因为这是常量的计算方式。结果是int32 1
“o”然后变成代表1的“装箱int32”。编译器看到常量(不变)表达式
3/2
,并执行常量折叠:在编译期间对常量表达式求值,结果用于替换常量表达式。编译器将从更改原始语句
object o = 3/2 ;
致:
由于您将整数1
从struct
向上转换为object
,因此它会被装箱
需要注意的是,其他类型的常量表达式也会发生同样的情况:
string s = "a" + "b" + "c" ;
已应用相同的恒定折叠变换,并成为:
string s = "abc" ;
运行代码并找出答案。没有必要假设。我只能用一个作为答案,特别感谢尼古拉斯·凯里的正确答案。
object o = 1 ;
string s = "a" + "b" + "c" ;
string s = "abc" ;