为什么在字符串中添加整数会产生字符串?

时间:2016-12-22 21:57:55

标签: c#

我无法理解,为什么在第一个写句子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();
        }
    }
}

1 个答案:

答案 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作为输出。