概述
在数学中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代码中
- int类型和string类型进行" "操作,int类型会默认强制转换为string类型,所以最后的结果是两个string类型进行字符串的拼接,所以结果是"1" "1"="11";
- 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代码中
- 根据图三可以判断,JavaScript没有char类型;
- int类型和string类型进行" "操作,int类型会默认强制转换为string类型,所以最后的结果是两个string类型进行字符串的拼接,所以结果是"1" "1"="11";
- 这种形式的'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代码中
- 没有string这种类型;
- 由例1、例2可以推出:int类型的变量和char类型进行" "操作,char类型会默认强制转换第一个字符为int类型,后面的字符舍去,所以最后的结果是两个int类型进行字符串的相加,所以结果是1 '1'=2,1 '12'=2;
- 由例3可以推出,int类型的变量和char类型进行" "操作,当char类型里面的值不是由0~9这几个数字组成时,将会报错:在将 varchar 值 'd' 转换成数据类型 int 时失败;
- 由例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代码中
- 没有char类型,''和""是同一种标识字符串类型的标识符。
- int类型和string类型进行" "操作,string类型会默认强制转换为int类型,所以最后的结果是两个int类型进行相加,所以结果是1 '1'=2,1 "1"=2,1 "12"=13;
五、还有更多的语言值得我们去探讨
如下图所示: