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

2018-05-18 12:54:34 浏览数 (1)

概述

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

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

 目录:

一、在.Net代码中

二、在JavaScript代码中

三、在SQLServer代码中

四、在PowerShell代码中

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

一、在.Net代码中

(1)代码如下所示:

代码语言:javascript复制
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());

(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)代码如下所示:

代码语言:javascript复制
<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)代码如下所示:

代码语言:javascript复制
----例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)代码如下所示:

代码语言:javascript复制
#例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;

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

如下图所示: 

0 人点赞