先问一个问题
x+=i和x=x+i两个表达式是一样的吗?
很多人都认为二者是一样的,没有什么不同,只是一个是另一个的简写形式罢了,
但是这并是十分准确的,这两个表达式都是赋值表达式,一个简单的”=“赋值表达式,
另一个是复合赋值表达式。
在java中有一种隐式的类型转换,在复合赋值表达式中,自动的将其所执行的计算的结果,转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响,但是,如果结果的类型比该变量的类型要宽,那么复合赋值操作将隐式的执行窄化操作的类型转换,所以上述两个表达式可能会造成编译错误。
例如:
short x=0; int i=123456;
x+=x+i;//不会产生任何的编译错误,但是包含了一个隐式的类型转换。
您可能会说执行的结果是123456,但是并非如此,它的值是-7616,int的类型对于short太大了,要进行窄化操作,截取后四位,所以结果并不是你所想。
相对应的,简单复制是非法的,因为它视图将int数值赋值给short变量,他需要一个显示的类型转换
x=x+i//会造成编译错误
所以,复合赋值表达式是很危险的,为了避免这种错误,不要讲复合赋值操作符用于byte,short,char类型的变量上,在用于int时,要保证右侧表达式不是long,float,double,复合赋值用于float时,保证右侧不是double,防止编译器窄化。
具体关于窄化与放大隐式转化的问题可以查看java编程思想一书,非常详细!
分享到:
相关推荐
值得注意的是,如果左侧的变量与右侧的值类型不兼容,如 `int` 和 `long`,编译器会尝试自动转换类型,就像上面例子中的 `i = i + j` 无法编译,而 `i += j` 可以编译并运行。 然而,`++` 是自增操作符,分为前缀...
这些题目涵盖了Java编程语言的基础知识,包括选择题、填空题、判断题和程序填空,主要涉及数据...例如,简答题中的程序段涉及到类的实例化、方法调用、数组操作、字符串处理等,需要对Java编程有深入理解才能准确回答。
- 更新中点坐标:x += dx_i,y += dy_i。 - 计算新的dy_i = (dy_i + m)。 - 如果dy_i > dx_i,x += 1,dy_i -= dx。 现在我们转向画圆算法。最常用的画圆算法是Bresenham算法,它也适用于椭圆。Bresenham算法...
17. 解关于x的方程240()xaxaR++=Î,在复数域中求解,考虑判别式和韦达定理。 18. (1)用集合语言表述的语句涉及点、线、面的关系,需要清楚点、线、面的定义。 (2)画图部分无法在文字中表达,需实际作图。 19. (1)...
如果`x`和`i`的类型匹配,那么`x += i`是合法的。若要让`x = x + i`不合法,可以通过改变`x`和`i`的类型,比如将`x`定义为`String`,而`i`保持为`int`,则尝试执行`x = x + i`会导致编译错误,因为`String`不能与`...
sum_x2 += points[i].x * points[i].x; } ``` 3. **计算斜率和截距**:利用最小二乘法的公式计算斜率a和截距b。 ```c double a = (N * sum_xy - sum_x * sum_y) / (N * sum_x2 - sum_x * sum_x); double b = (sum...
通过实际编程练习,学生能够深入理解这些算法的工作原理,并能够在MFC环境下实现这些算法。 #### 数值微分法 数值微分法是一种较为直观的直线绘制方法。其基本思想是通过计算直线斜率来确定像素位置。具体步骤如下...
通过打开并学习这些VI,你可以更深入地理解Labview的编程方式和数据处理流程。 总结来说,Labview 2015中的XY图控件是实现科学计算和数据可视化的强大工具,通过理解正弦函数的性质和Labview的数据操作方法,我们...
下面我们将深入探讨这一主题。 首先,让我们了解这两种坐标系的基本概念。百度坐标(BD-09)是百度地图使用的坐标系统,它基于WGS84坐标系进行了偏移处理,以保护用户隐私。而天地图坐标(CGCS2000)则是中国国家...
在高等代数的学习过程中,多项式的除法与因式分解是基础中的基础,本章节将通过对具体习题的解析来深入理解这些概念。 **1. 多项式的除法** ##### 例题 P44.11 对于多项式 $f(x)$ 和 $g(x)$ 的除法运算,我们需要...
K7 += x[i] * x[i] * x[i] * x[i]; // 求x四次方之和 } ``` 3. **系数计算**: - 计算多项式的系数`a2`、`a1`和`a0`。 ```c a2 = (K1 * K5 - K3 * K4 - (N * K3 - K1 * K2) * (K1 * K6 - K4 * K4) / (N * K4 ...
### 高等代数北京大学第三版答案解析 #### 第一章 多项式习题解答概览 ...以上是第一章多项式习题的部分解答,通过这些练习,读者能够更深入地理解和掌握多项式的运算规则及其在实际问题中的应用。
x += 1 ret += 1 array[x][y] = ret # 从下边一行开始由右到左添加元素 while y > i: y -= 1 ret += 1 array[x][y] = ret # 从左边一列开始由下到上添加元素 while x > i + 1: x -= 1 ret += 1 ...
《TMS320C54X+DSP:结构、原理与应用详解》 TMS320C54X+ DSP(Digital Signal Processor)是由德州仪器(Texas Instruments...通过深入学习和实践,我们可以更好地利用TMS320C54X+ DSP的优势,解决复杂信号处理任务。
### 最长公共子序列问题详解 #### 一、问题定义及背景 最长公共子序列(Longest Common Subsequence,简称LCS)问题属于...通过对这段代码的理解和分析,我们可以更深入地理解LCS问题及其动态规划解决方案的精髓。
第四章第四节“数系的扩充与复数的引入”是高中...通过解决这些问题,学生能够深入理解复数的基本概念,并能够熟练运用这些概念来解决问题。在高考复习阶段,这样的追踪训练有助于巩固对复数的理解,并提高解题能力。
在IT领域,一元多项式是一种数学概念...通过对一元多项式的理解和应用,不仅可以提升编程技能,还能深化对数值计算和数据结构原理的理解。通过实验实践,我们能更好地掌握这些理论知识,并将其应用于实际问题的解决中。
【正弦型函数y=Asin(ωx+φ)的图象与性质】 ...这些题目涵盖了正弦型函数的基本概念、图像性质以及变换规则,是高考复习中不可或缺的部分,通过深入理解和实践,可以提升学生解决这类问题的能力。
### 高等代数第三版答案解析 #### 知识点概述 本篇文章将基于《高等代数第三版》中的部分...这些习题的解答过程有助于学生深入理解多项式的基本概念及其解题方法,对于提高学生的数学素养和解题能力具有重要的意义。