【问题与思考】1+"1"=?
概述
在数学中1+1=2,在程序中1+1=2,而1+"1"=?
围绕着1+"1"的问题,我们来思考下这个问题。
目录:
一、在.Net代码中
二、在JavaScript代码中
三、在SQLServer代码中
四、在PowerShell代码中
五、还有更多的语言值得我们去探讨
一、在.Net代码中
(1)代码如下所示:
Console.Write("例1:");
Console.WriteLine("1 + " + '"' + "" + '"'+" = ?");
int a = ;
Console.WriteLine("a = {0}", a);
Console.WriteLine("a 的类型:{0}", a.GetType());
string b = "";
Console.WriteLine("b = " + '"' + "" + '"');
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 = '';
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)代码如下所示:
<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)代码如下所示:
----例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+'' as '例4结果' --例5
print '例5结果:'
select 1+'' 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)代码如下所示:
#例1 1+'1'=?
$a=1
$b='1'
$a+$b #例2 1+'12'=?
$a=1
$b='12'
$a+$b #例3 1+"1"=?
$a=1
$c=""
$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;
五、还有更多的语言值得我们去探讨
如下图所示:

【问题与思考】1+"1"=?的更多相关文章
- 领域驱动和MVVM应用于UWP开发的一些思考
领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- 关于 CSS 反射倒影的研究思考
原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...
- 关于.NET参数传递方式的思考
年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想法,但就是叫不动我的手脚,所以我只能看着别人在做我想做 ...
- 使用NUnit为游戏项目编写高质量单元测试的思考
0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...
- OpenGL shader 中关于顶点坐标值的思考
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...
- 关于领域驱动设计(DDD)中聚合设计的一些思考
关于DDD的理论知识总结,可参考这篇文章. DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/, ...
- 关于bug分析与异常处理的一些思考
前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...
- 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
× 缘起---闲逛博客园 前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时, 第一反应我想多了~以为是XX种子(你懂的~ ...
- 对于多个数据库表对应一个Model问题的思考
最近做项目遇到一个场景,就是客户要求为其下属的每一个分支机构建一个表存储相关数据,而这些表的结构都是一样的,只是分属于不同的机构.这个问题抽象一下就是多个数据库表对应一个Model(或者叫实体类).有 ...
随机推荐
- Prototype in JavaScript
声明 本文旨在入门,简单了解下何为prototype & __proto__ 原型对象 我们创建每个函数都有个prototype(原型)属性,该属性是一个指针,指向一个对象,而这对象的用途是包 ...
- C#中使用DES和AES加密解密
C#中使用DES和AES加密解密 2008-01-12 09:37 using System;using System.Text;using System.Security.Cryptography; ...
- Java并发包中Lock的实现原理
1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制.本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\l ...
- 移动页面HTML5自适应手机屏幕宽度
标签: 网上关于这方面的文章有很多,重复的东西本文不再赘述,仅提供思路,并解释一些其他文章讲述模糊的地方. 1.使用meta标签,这也是普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的, ...
- FindFriendsServer服务搭建
本文介绍如何搭建FindFriendsServer(https://github.com/hnrainll/FindFriendsServer)所需的环境. 环境需要: Windows+Apache+ ...
- iOS开发Swift篇(01) 变量&常量&元组
iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...
- 传递给数据库 'master' 中的日志扫描操作的日志扫描号无效
错误:连接数据库的时候提示:SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 C:\Documents and Settings\Administrator>" ...
- AsyncTask实现多任务多线程断点续传下载
这篇博客是AsyncTask下载系列的最后一篇文章,前面写了关于断点续传的和多线程下载的博客,这篇是在前两篇的基础上面实现的,有兴趣的可以去看下. 一.AsyncTask实现断点续传 二.AsyncT ...
- 奇怪吸引子---TreeScrollUnifiedChaoticSystem
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- ASP.NET 回调技术(CallBack)
在asp.net中客户端与服务器端的交互默认都是整页面提交, 此时客户端将当前页面表单中的数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器重新实例化一个当前页面类的实例响应这个请求,然后将整个 ...