概述

在数学中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代码中

  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+'' as '例4结果' --例5
print '例5结果:'
select 1+'' 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=""
$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;

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

如下图所示:

【问题与思考】1+"1"=?的更多相关文章

  1. 领域驱动和MVVM应用于UWP开发的一些思考

    领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...

  2. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  3. 关于 CSS 反射倒影的研究思考

    原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...

  4. 关于.NET参数传递方式的思考

    年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想法,但就是叫不动我的手脚,所以我只能看着别人在做我想做 ...

  5. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

  6. OpenGL shader 中关于顶点坐标值的思考

    今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...

  7. 关于领域驱动设计(DDD)中聚合设计的一些思考

    关于DDD的理论知识总结,可参考这篇文章. DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/, ...

  8. 关于bug分析与异常处理的一些思考

    前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...

  9. 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。

      ×   缘起---闲逛博客园 前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时, 第一反应我想多了~以为是XX种子(你懂的~ ...

  10. 对于多个数据库表对应一个Model问题的思考

    最近做项目遇到一个场景,就是客户要求为其下属的每一个分支机构建一个表存储相关数据,而这些表的结构都是一样的,只是分属于不同的机构.这个问题抽象一下就是多个数据库表对应一个Model(或者叫实体类).有 ...

随机推荐

  1. Django简介

    Django, 应该读作jan go,读音演示 D是不发音的---发音的---音的---的--- django简介:urls.py网址入口,关联到views.py views.py处理用户发出的请求, ...

  2. C# 热敏打印机 Socket 网络链接 打印 图片

    C# 热敏打印机 Socket 网络链接 打印 图片 (一) http://www.cnblogs.com/rinack/p/4838211.html C# 热敏打印机 Socket 网络链接 打印 ...

  3. 【转】使用Cocoapods创建私有podspec

    Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理.Cocoapods的介绍及优点本文就不在赘述,我开始 ...

  4. liunx 服务内存消耗100% 怎么处理

      一.排查问题 查看内存使用 free 查看进程使用存储状况.看是不是业务进程在消耗存储,如果是就要优化业务代码了 使用top 命令 如果不是怎么办 二.处理办法 1.把没有用到的消耗内存的服务进程 ...

  5. 统一回复《怎么学JavaScript?》

    作者:小不了链接:https://zhuanlan.zhihu.com/p/23265155来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 鉴于时不时,有同学私信问我( ...

  6. VS2010在运行状态下编辑代码

    在VS2010环境下,当程序处于调试运行状态时,编辑代码会出现下图提示框: 这就给边编辑代码边查看程序运行效果带来不便. 解决方法:在程序没有运行的时候,打开菜单“工具”——>“选项”——> ...

  7. 转:如何学习javascript

    ps:每过一段时间就会发觉自己懂的越来越少,打开编辑器的时候不知道从何入手.兴许是过于急于求成,总没有系统地去对这门语言进行学习,囫囵吞枣,只想着能够解决工作需求.是时候让自己重新出发,从零开始,一页 ...

  8. WPF TextBox自动滚动到最户一行

    textBox经常用来显示程序的运行状态或者消息,如何让他自动滚动呢? 在显示消息代码下加一条自动滚动到底部的语句即可: TextBox1.ScrollToEnd(); (如果要显示垂直滚动条设置Ve ...

  9. ubuntu 13.10 Ralink RT3290 无线与蓝牙4.0的驱动安装

    我的本是hp envy15, 蓝牙与无线的型号是Ralink RT3290, 装了Ubuntu 13.10 64bit后,蓝牙无法使用,无线几秒钟就会断开,查知,是因为驱动问题. ## 准备工作 首先 ...

  10. mvc 方法只允许ajax访问

    有时候我们写一些方法 只想在ajax使用  其他的不想暴露  就可以对方法进行限制 如下: [AttributeUsage(AttributeTargets.Method)] public class ...