short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确
这个问题以前碰到过,也研究过,发表一下:
如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符。Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。
换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。
因此,复合赋值表达式可能是危险的。为了避免这种令人不快的突袭,请不要将复合赋值操作符作用于byte、short或char类型的变量。
因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。
后面的那个不会发生类型的提升,JAVA规范上说 e1+=e2 实际上是 e1=(T1)(e1+e2),其中T1是e1的数据类型。 s1+=1等效于 s1=(short)(s1+1),所以是正确的。
转载于:https://www.cnblogs.com/toSeeMyDream/p/5537741.html
short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确相关推荐
- short s1 = 1; s1 = s1 + 1; 有错吗?short s1 = 1; s1 += 1 有错吗
short s1 = 1; s1 = s1 + 1; 有错吗?short s1 = 1; s1 += 1 有错吗? 前者不正确,后者正确.对于 short s1 = 1; s1 = s1 + 1;由于 ...
- 算法019:字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
题目:字符串轮转.给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串).示例1:输入:s1 = "waterb ...
- short类型占16位,可以赋给short类型的最大值32767,最小值为-32768
short类型占16位,可以赋给short类型的最大值32767,最小值为-32768 最大值0111111111111111 = 32767 最小值1000000000000000 = -32768
- java中short的取值范围_java中byte、short、int、long、float、double取值范围
基本类型 1.整数:包含int,short,byte,long 2.浮点型:float,double 3.字符:char 4.布尔:boolean 分析基本数据类型的特点,最大值和最小值. 1. 基本 ...
- c语言定义函数insert,c语言编写函数insert(char s1[ ],char s2[ ],int pos),实现在字符串s1中的指定位置pos处插入字符串s2。...
满意答案 人變了心從未 推荐于 2016.10.18 采纳率:54% 等级:12 已帮助:6450人 你写这个貌似不能实现额 用string.h库很容易实现的 要是你不能用string.h的话 ...
- //4.判断一个字符串是否为另外一个字符串旋转之后的字符串。 //例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 = abcd和s2 = ACBD,返回0. //AABCD左旋
#include<stdio.h> #include<string.h> int main() {char arr[20] = "AABCD";char * ...
- C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
//从网络中读取C的无符号int,short,byte字节数组,相应转换成java的long,char,short short anUnsignedByte = 0; char anUnsignedS ...
- Java short 无符号右移_char类型byte类型或short类型进行无符号右移遇到的神奇问题...
代码 package com.ggp.test.Third; /** * @Author:ggp * @Date:2019/7/27 17 23 * @Description: */ public c ...
- 档案盒正面标签制作_错题本科学制作方法、正确使用方式及窍门
错题本的作用不用多说,重点是如何制作错题本以及正确使用方法.小编整理了以下制作错图集的正确步骤,希望对大家有用. 一.制作错题本的简单步骤 步骤1:把所有的练习册和试卷找出来;分学科按学期顺序整理;以 ...
最新文章
- 关于卡尔曼滤波和粒子滤波最直白的解释
- Response.Redirect(),Server.Transfer(),Server.Execute()的区别与网站优化
- 谁能够在萧条中生存?历史总是惊人相似的(转)
- 网站程序IIS布署问题备忘录
- php如何避免时间重复,如何避免/停止php和html的重复插入?
- [转]关于数据库的并发性的一个解决方案
- 出现画面抖动_连续抖动20小时!虎门大桥桥面如波浪翻滚,专家:个人感觉没问题...
- 机器视觉--图像形态学
- Web项目之Flask框架
- Python 波浪线与补码
- lstrip在python中是什么意思_为什么氦气吸入后会变声?
- MySQL中查询字段为空或者为null方法
- js练习4(注册验证)
- breakall lisp文件_cad中pl线画的粗线转线框后,能转到su里封面么,求解
- mysql delphi5_Delphi 7连接MySql 5.5.15
- Androidstudio开发ARcore
- 使用rpm 安装wget
- python剪贴板操作_python操作剪贴板
- MySQL的auto_increment使用
- 医院信息系统中服务器配置的原则,如何保障医院信息系统(HIS)中数据库的安全性...
热门文章
- 判别模型和生成模型的区别
- 特斯拉“纯视觉路线”能去掉ISP吗?
- 全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
- “ compiler-rt”运行时runtime库
- ASIC设计-终极指南
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)
- 【注意事项】Markdown遇到的小问题
- 【网站汇总】安装教程系列
- [JAVA EE] Filter过滤器
- [JAVA EE] 内联用法