刚看到一面试题,题目是这样的:short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?

初看之下就是s1=s1+1和s1+=1的区别。在开发中我们基本上是使用后一种方式,也不太去追究具体的区别,因为效果出来都是一样的,所以就会很自然的认为没什么区别。我一开始也就是这么认为,但是作为一道面试题总是有点用意的,如果没区别就不会拿出来了,于是我就有这种疑惑。有疑惑就解决嘛,细看一下,有个short,而1是int类型,那么应该是跟类型转换有关的了。那么具体是怎么转的呢?从大脑这深海里调出有关类型转换的知识点过一遍,原来s1=s1+1;是先把s1转换成int类型,然后再执行s1+1运算,那么运算出来的结果就是int类型了,但是之前定义的s1是short类型哦,所以int类型赋值给short就会出错了,我们知道short是可以隐式转换成int的,而int转short就需要强制转换了;s1+=1呢?+=是大多数高级语言(java,c#)既定的运算符,类似s1+=1这样的运算,在执行完s1+1运算之后会强制转换成+=符号前面的表达式的类型 ,所以就不会出错了。总结一句话就是s1+=1比s1=s1+1多了一步强制转换的过程呢!

s1=s1+1与s1+=1的区别的更多相关文章

  1. TCPL学习笔记:编写expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在s2中扩充完整。可以处理大小写及字符,以及a-b-c, a-z0-9以及-a-z等多种情况。

    话不多说,看代码: #include <stdio.h> #include <stdlib.h> int main(void) { ] = "a-z0-9hahah- ...

  2. squeeze(s1,s2),将字符串s1中任何与字符串s2中匹配的字符都删除

    void squeeze(char a[],char b[]) { //要实现把s2的任意字符如果出现的话就在s1中删除 //1.首先判断s1[j]==s2[i]&&s1[j]=='\ ...

  3. 返回指定字符串位置的函数FIELD(S,S1,S2,...) 与 FIND_IN_SET(S1,S2) 函数

    FIELD(S,S1,S2,...)  与 FIND_IN_SET(S,S1) 函数  ------> 这2个函数都是返回指定字符串在源串中的出现的位置(皆是第一次出现的位置),但2个函数的参数 ...

  4. short s1 = 1; s1 = s1 + 1;和 short s1 = 1; s1 += 1;的问题,终于弄懂了

    对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误. 对于shor ...

  5. 对于char *s1 和 char s2[] 的认识

    对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误. char *s1 = "hello"; char s2[] = " ...

  6. 转!!Java 基础面试题的剖析: short s1=1;s1 = s1 +1 报错? s1+=1 呢

    short s1=1;s1 = s1 +1会报错吗?    package common; public class ShortTypeTest { /* * @param args */ publi ...

  7. 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?

    package common; public class ShortTypeTest { /* * @param args */ public static void main(String[] ar ...

  8. short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确

    这个问题以前碰到过,也研究过,发表一下:    如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确.这两个表达式都被称为赋值表达式.第二个表达式使用的是简单赋值操作 ...

  9. short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确。为何?

    如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确.这两个表达式都被称为赋值表达式.第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符. ...

  10. 【Java面试题】57 short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

    Java规范有这样的规则 [ 1.高位转低位需要强制转换 2.低位转高位自动转. ] short s1 = 1; s1 = s1 + 1;有什么错? 答: i 是int 型   s1 short型 通 ...

随机推荐

  1. C# winform 动态调用WebService

    封装的通用方法: using System; using System.Collections.Generic; using System.Text; using System.Xml; using ...

  2. shell 脚本 exit 1 报错:numeric argument required问题解决

    原因是在window环境编辑会有特殊字符,解决办法:sed -i'' "s/\r//" file_name

  3. TJI读书笔记17-字符串

    TJI读书笔记17-字符串 不可变的String 重载”+”和StringBuilder toString()方法的一个坑 String上的操作 格式化输出 Formatter类 字符串操作可能是计算 ...

  4. WCF 服务调用 QueryRun

    通过AX2012的WCF服务调用AX2012的方法时,如果方法里调用了QueryRun对象时,会报错,报错信息如下:System.ServiceModel.FaultException: 无法将类型为 ...

  5. python的路径

    原来可以这么用和那么用 os.mkdir('d:\\su\\help1') os.mkdir('d:/su/help') 为啥提供俩种呢 真乱

  6. c#委托和事件的介绍

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. (1). delegate delegate我们常用到的一种声明   Delegate至少0个参 ...

  7. opengl

    基于OpenGL ES的GLfixed类型使用 OpenGL ES中引入了GLfixed类型.这个类型一般被定义为int,32位.高16位表示整数部分,低16位表示小数部分.由于其整数部分和小数部分所 ...

  8. 学习制作第一个 openfire 插件

    本文地址:http://www.cnblogs.com/jying/p/3683409.html 蛋疼的自学路~~~ 开始想法是修改openfire源码,但修改后发现不好测试,不会发布,不会使用,各种 ...

  9. cf730e

    一道数学题,这篇博客很好:http://blog.csdn.net/morejarphone/article/details/52926627(这样应该不算转载吧) 总结:做这类题目显然应该直接根据相 ...

  10. 搭建MySQL MHA高可用

    本文内容参考:http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/ MySQL MHA 高可用集群 环境: Linu ...