• 【问题与思考】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;

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

    如下图所示: 

  • 相关阅读:
    java设计模式
    漏桶算法工具类
    http请求requestUtils
    去掉字符串中特殊符号造成的空格
    java 分布式id生成算法
    java枚举
    java 32个Java面试必考点
    配置tomcat下war包可以自压缩
    tomcat (选号)公司tomcat无页面解决
    docker 12 docker容器数据卷
  • 原文地址:https://www.cnblogs.com/jackson0714/p/4584690.html
Copyright © 2020-2023  润新知