我无法理解,为什么在第一个写句子5和7是数字(所以输出是 12 ),但在最后一个写句子5和7是string
s(因此输出 57 )。
在C#规则中,如果Write语句中的第一个内容是string
,那么其他所有内容都是string
吗?
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(String[] args)
{
Console.WriteLine( 5 + 7 );
Console.WriteLine();
Console.WriteLine( "? " + 5 + 7 );
Console.ReadLine();
}
}
}
答案 0 :(得分:0)
我不会说这是一个规则问题。它更像是编译器断言运算符的优先级和优先级的方式。
.text-field{
-fx-effect: dropshadow( three-pass-box, red , 10.0, 0.0,0.0,0.0);
-fx-background-insets:3.0;
-fx-background-radius: 5.0;
-fx-prompt-text-fill:black;
-fx-text-fill:black;
-fx-font-size:12.0;
-fx-font-weight:bold;
}
.text-field:focused{
-fx-background-color: firebrick;
-fx-text-fill:white;
-fx-prompt-text-fill:white;
-fx-background-insets: -0.1, 2.0;
-fx-font-size:14.0;
}
也是一个具有方法和运算符的特定实现的类。基本上你可以想象,如果在运算符的右侧有一个整数,则会添加两个数字。在第一种情况下,第一个参数是整数Int
,因此编译器将选择执行整数运算符。
5
也是一个具有自己的string
运算符实现的类,它将连接运算符右侧的项。由于每个对象都有+
方法,编译器在第二种情况下调用ToString
ToString
方法,将数字转换为字符串并连接它们。因为在左侧的第二种情况下有一个Int
,编译器会执行string
运算符的string
重载。
您可以使用+
来影响结果,因为它们具有更高的优先级。因此,将首先评估括号内的表达式:
( )
这次Console.WriteLine( "? " + ( 5 + 7 ));
运算符重载的Int
实现将首先执行,之后执行+
之一,您应该得到预期的String
作为输出。