日期:2014-05-20  浏览次数:20640 次

一个有趣的小问题:++,+= 1,= 1+真的一样吗
今天突然想到这个一个问题,就是基本数据类型的题目所说的问题。
这个问题的答案好像很简单,肯定啊。
++a,a+=1,a=a+1效果肯定是一样的啊。但是这里有个问题,我们一般用的都是int,而数据基本数据类型在计算的时候都是转换成int的(整数的时候),所以这里看不出什么问题。但是换到byte来看

public class test {

public static void main(String[] args) {
// TODO Auto-generated method stub
byte a,b,c,d,e;
int i;
a=b=c=d=e=127;

System.out.println(a+=1);
System.out.println(b++);
System.out.println(++c);
System.out.println(d = (byte) (d+1));//这个句子必须进行强制转换,否则编译不通过
System.out.println(i = e+1);
}

}
/*Output:
 * -128
 *127
 *-128
 *-128
 *128
 */


很明显的看到前三条语句没有进行数据类型转换,而后两条进行了类型转换
+=1和++是相同的,而+= 和= +是不一样的,前者不会进行类型转换,而后者会。

请问我这个想法是不是正确的呢?或者我忽略了什么吗?
------解决方案--------------------
+=和++这是java内部自动转换的,不存在将a+=1进行byte转换,  而d = (byte)(d+1)这算术运算符,java在操作时,默认提升为int类型,所以要人为转换所需类型。
------解决方案--------------------
你为何不使用javap  。。。查看反汇编代码多直接
byte b =1 ;
int a = b++;

当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:
1. 所有byte型、short型和char型将被提升到int型。
2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。

------解决方案--------------------
不一样。优先级