about “+=” operator in Java
2016-02-27 17:29
483 查看
I found this interesting question on stackoverflow:
Many of us may believe that:
But let's try this:
Then i=i+j; will not compile, but i+=j; will compile fine.
Dose it mean that in fact i+=j; is a shortcut for something like: i=(type of i)(i+j) ????
Answer:
As always with these questions, the JLS holds the answer. In this case
§15.26.2 Compound Assignment Operators.
An extract:
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.
An example cited from
§15.26.2
[...] the following code is correct:
and results in x having the value 7 because it is equivalent to:
In other words, the assumption is correct.
Many of us may believe that:
<span style="white-space:pre"> </span>i +=j;is just a shortcut for
<span style="white-space:pre"> </span>i=i+j;
But let's try this:
<span style="white-space:pre"> </span>int i=5; <span style="white-space:pre"> </span>long j=8;
Then i=i+j; will not compile, but i+=j; will compile fine.
Dose it mean that in fact i+=j; is a shortcut for something like: i=(type of i)(i+j) ????
Answer:
As always with these questions, the JLS holds the answer. In this case
§15.26.2 Compound Assignment Operators.
An extract:
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.
An example cited from
§15.26.2
[...] the following code is correct:
<span style="white-space:pre"> </span>short x = 3; <span style="white-space:pre"> </span>x += 4.6;
and results in x having the value 7 because it is equivalent to:
<span style="white-space:pre"> </span>short x = 3; <span style="white-space:pre"> </span>x = (short)(x + 4.6);
In other words, the assumption is correct.
相关文章推荐
- java什么时候需要多线程 共享 变量
- RxJava转换操作符cast
- java 分页
- 如何给Eclipse中添加库(jar包)
- RxJava使用详解
- 多数据源动态制定 Druid数据源与Spring 关联 监控
- 配置_Druid和Spring关联监控配置
- io流处理文件夹复制功能(java代码)
- springMVC对异常处理的支持
- springMVC对异常处理的支持
- spring 整合jackson
- eclipse j2ee打开出错 java was started but returned code=13
- java中接口实现的大概标准格式
- 在spring 中如何注入map,set,list,property等参数
- java 基本语法(一)
- Java多线程Lock对象常用方法(4)
- Spring 的 init-method 和 destory-method
- Struts2 过滤器
- Java中的==与equals比较。
- Java(多)线程中注入Spring的Bean