请教各位大虾。比如short s1=1;s1=s1+1.不能通过编译,而s1+=1却能通过编译,这是为什么呢?
解决方案 »
- java 泛型怎么那么奇怪? 求指点
- 在JScrollPane中绘图的问题
- 请问System.out.println('a'+1);与System.out.println(""+'a'+1);的区别是什么?
- 请教各位应该怎么改啊?出现有警告..
- 新手请教。谢谢回答!
- 散分
- rs.getString(text字段),当sqlserver中text字段为""时,出现NullPointerException。
- 一个问题与大家探讨,各位请进,来者有分!!!
- Could SSL be used to SMTP???
- 由于工作和兴趣的需要,最近经常翻译一些有关JAVA的论文,大多是国外经典站点的。
- java和C的数据转换问题
- static synchronized 和 non-static synchronized的区别
1例 使用简单赋值运算2例 使用复合赋值运算 1例中的 ' 1 ‘为int类型,不会自动转换为short型 ,这样可以:s=(short)(s+1);但可能会损失精度 而简单赋值运算和复合赋值运算的最大差别就在于:复合赋值运算符会自动地将运算结果转型为其左操作数的类型! 这就是1例编译不通过,2例编译却能通过的原因。 精度取决于他们相加的结果是否超过short所能表达的最大值,超过就丢精度 反之不丢~~
因为s1=s1+1左边是short类型,右边是int类型,需要强转才能通过编译
{
public static void main (String args[]){
short s1 = 1;
s1 = (short)(s1+1);
System.out.println(s1);
}
}
1是int类型,s1+1的的结果也是int类型,加入short后,将(s1+1)结果强制转换