“黑马程序员”Java赋值运算符
2015-07-10 09:46
260 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
今天学习的是关于Java的基本运算符,这里我遇到的问题,就是关于Java中的赋值运算符:+=、-=、*=、/=的问题。
众所周知,赋值运算符的在所有Java运算符中的优先级是最低的。所以我们遇到某些情况,比如:
int a = 5;
a+=5*++a/5 + 2;
时我们往往会考虑,先对右边进行运算,此时++a所以a为6。然后右边总和为8,此时在进行a+=8;的运算,所以a=a+8;得出a=6+8;可是实际我们编程运行的情况却是a为13。这是怎么一回事呢?其实这是概念的理解错误,因为我们遇到这种题我们往往会把上面运算式改为:
a = a + (5*++a/5+2)来运算的,而其实际的定义确是:实际使用示例:
int n = 2;
n += 3;
说明:计算以前的n的值是2,也就是把n
+ 3的值,也就是5再赋值给n,经过运算以后值为5。
这里关于复合赋值运算符还应注意的一点是:
复合赋值运算不会改变结果的类型,所以在有些时候运算在逻辑上会出现错误,但是符合计算中数值的表述。例如:
byte b = 127;
b += 1;
System.out.println(b);
根据前面的介绍,byte类型的取值区间是-128~127,由于复合赋值运算符不改变结果的类型,则导致结果是-128,而不是128.原因如下:
byte类型值127的机器数是01111111,0表示正数,后续的数值表示127
该数值加1后,得到的数值是10000000,二进制加法
而10000000在byte类型中恰好是-128的机器数表示形式其它类型的符合运算符也可能存在类似的情况,使用时需要注意。
今天学习的是关于Java的基本运算符,这里我遇到的问题,就是关于Java中的赋值运算符:+=、-=、*=、/=的问题。
众所周知,赋值运算符的在所有Java运算符中的优先级是最低的。所以我们遇到某些情况,比如:
int a = 5;
a+=5*++a/5 + 2;
时我们往往会考虑,先对右边进行运算,此时++a所以a为6。然后右边总和为8,此时在进行a+=8;的运算,所以a=a+8;得出a=6+8;可是实际我们编程运行的情况却是a为13。这是怎么一回事呢?其实这是概念的理解错误,因为我们遇到这种题我们往往会把上面运算式改为:
a = a + (5*++a/5+2)来运算的,而其实际的定义确是:实际使用示例:
int n = 2;
n += 3;
说明:计算以前的n的值是2,也就是把n
+ 3的值,也就是5再赋值给n,经过运算以后值为5。
这里关于复合赋值运算符还应注意的一点是:
复合赋值运算不会改变结果的类型,所以在有些时候运算在逻辑上会出现错误,但是符合计算中数值的表述。例如:
byte b = 127;
b += 1;
System.out.println(b);
根据前面的介绍,byte类型的取值区间是-128~127,由于复合赋值运算符不改变结果的类型,则导致结果是-128,而不是128.原因如下:
byte类型值127的机器数是01111111,0表示正数,后续的数值表示127
该数值加1后,得到的数值是10000000,二进制加法
而10000000在byte类型中恰好是-128的机器数表示形式其它类型的符合运算符也可能存在类似的情况,使用时需要注意。
相关文章推荐
- “黑马程序员” java位逻辑运算符
- “黑马程序员” java成员变量和局部变量
- “黑马程序员“Java中的强制类型转换是如何转换的?
- 黑马程序员 java构造函数
- 黑马程序员-java基础IO流(3)
- 年轻程序员需要学习的5大经验
- 黑马程序员——Java基础——多线程(一)
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 黑马程序员 面向对象 接口
- 黑马程序员 面向对象 继承 抽象
- 黑马程序员 面向对象 单例设计模式
- 【剑指Offer学习】【面试题54:表示数值的字符串】
- 【剑指Offer学习】【面试题53:正则表达式匹配】
- 【剑指Offer学习】【面试题52:构建乘积数组】
- 给程序员第一天工作留下好印象的10个方式
- 超实用的iOS面试题集合
- 面试经验
- 给程序员第一天工作留下好印象的10个方式
- 程序员要有持续产出
- 程序员,请远离拖延症!