扩大
缩小

【问题与思考】1+"1"=?

概述

在数学中1+1=2,在程序中1+1=2,而1+"1"=?

围绕着1+"1"的问题,我们来思考下这个问题。

 目录:

一、在.Net代码中

二、在JavaScript代码中

三、在SQLServer代码中

四、在PowerShell代码中

五、还有更多的语言值得我们去探讨

一、在.Net代码中

 

(1)代码如下所示:

Console.Write("例1:");
Console.WriteLine("1 + " + '"' + "1" + '"'+" = ?");
int a = 1;
Console.WriteLine("a = {0}", a);
Console.WriteLine("a 的类型:{0}", a.GetType());

string b = "1";
Console.WriteLine("b = " + '"' + "1" + '"');
Console.WriteLine("b 的类型:{0}", b.GetType());
 
Console.WriteLine("a + b = {0}",a+b);
Console.WriteLine("a + b 的类型:{0}", (a + b).GetType());
      
Console.WriteLine();
Console.WriteLine();

Console.Write("例2:");
Console.WriteLine("1 + '1' = ?");
Console.WriteLine("a = {0}", a);
Console.WriteLine("a 的类型:{0}", a.GetType());

char c = '1';
Console.WriteLine("c = " + "'1'");
Console.WriteLine("c 的类型:{0}", c.GetType());

Console.WriteLine("a + c = {0}", a + c);
Console.WriteLine("a + c 的类型:{0}", (a + c).GetType());
View Code

(2)运行结果:

(3)结论:

  在.Net代码中

  1. int类型和string类型进行"+"操作,int类型会默认强制转换为string类型,所以最后的结果是两个string类型进行字符串的拼接,所以结果是"1"+"1"="11";
  2. int类型和char类型进行"+"操作,char类型会默认强制转换ASCII码对应的值(char类型'1'对应的ASCII码的值为49),且值为int类型,所以最后的结果是两个int类型进行字符串的相加,所以结果是1+49=50;

 (4)附录一:ASCII码表

    

 

二、在JavaScript代码中

 

(1)代码如下所示:

 

<html>
<head>
    <script>
            
        //例1:1 + "1" = ?
        var a = 1;
        var b = "1";
        var result = a + b;
        alert(result);

        //例2:1 + '1' = ?
        var c = '1';
        var result = a + c;
        alert(result);

        //例3:1 + 'a' = ?
        var c = 'a';
        var result = a + c;
        alert(result);

    </script>
<body>

</body>
</html>

 

(2)运行结果:

例1、例2运行结果都是11,如图1

图1

例3运行结果是1a,如图2

图2

图3

(3)结论:

  在JavaScript代码中

  1. 根据图三可以判断,JavaScript没有char类型;
  2. int类型和string类型进行"+"操作,int类型会默认强制转换为string类型,所以最后的结果是两个string类型进行字符串的拼接,所以结果是"1"+"1"="11";
  3. 这种形式的'1'会被解析为string类型,所以1+'1'的结果和1+"1"的结果相同。

 

三、在SQLServer代码中

(1)代码如下所示:

----例1
--declare  @a int 
--declare  @b char
--set @a=1
--set @b='1'
--print '例1结果:'
--print @a+@b --2

----例2
--declare  @c char
--set @c='12'
--print '例2结果:'
--print @a+@c --2

----例3
--declare  @d char
--set @d='d'
--print '例3结果:'
--print @a+@d --在将 varchar 值 'd' 转换成数据类型 int 时失败。

--例4
print '例4结果:'
select 1+'1' as '例4结果'

--例5
print '例5结果:'
select 1+'12' as '例5结果'

(2)运行结果:

 

(3)结论:

  在SQL Server代码中

  1. 没有string这种类型;
  2. 由例1、例2可以推出:int类型的变量和char类型进行"+"操作,char类型会默认强制转换第一个字符为int类型,后面的字符舍去,所以最后的结果是两个int类型进行字符串的相加,所以结果是1+'1'=2,1+'12'=2;
  3. 由例3可以推出,int类型的变量和char类型进行"+"操作,当char类型里面的值不是由0~9这几个数字组成时,将会报错:在将 varchar 值 'd' 转换成数据类型 int 时失败;
  4. 由例4、例5可以推出:用select查询时,int类型的变量和char类型进行"+"操作,char类型会默认强制转换int类型,所以最后的结果是两个int类型进行相加,所以查询出来的集合是1+'1'=2,1+'12'=13。

四、在PowerShell代码中

 

(1)代码如下所示:

#例1 1+'1'=?
$a=1
$b='1'
$a+$b

#例2 1+'12'=?
$a=1
$b='12'
$a+$b

#例3 1+"1"=?
$a=1
$c="1"
$a+$c

#例3 1+"a"=?
$a=1
$d="a"
$a+$d

 

(2)运行结果:

(3)结论:

  在PowerShell代码中

  1. 没有char类型,''和""是同一种标识字符串类型的标识符。
  2. int类型和string类型进行"+"操作,string类型会默认强制转换为int类型,所以最后的结果是两个int类型进行相加,所以结果是1+'1'=2,1+"1"=2,1+"12"=13;

五、还有更多的语言值得我们去探讨

如下图所示: 

 

posted @ 2015-06-18 01:56  悟空聊架构  阅读(663)  评论(0编辑  收藏  举报
Copyright ©2019 悟空聊架构