byte b=1; b=b+1; System.out.println(b);
这是一段简洁的代码,很多初学者都会认为没问题,大,是结果是这样的:
这是因为Java中默认的整数类型为int型,而b为byte型数据,b+1为 byte+int 会自动类型提升为int 型,而b=b+1,是把b+1(int型)赋值给b(byte型),而大字节数据类型赋给小字节是需要强制类型转换的。那么:
byte b=1; b=(byte)b+1; System.out.println(b);
这样是不是就可以了呢?结果是:
依然会编译报错,这是因为计算机读取内容一般是按照从上到下,从左到右的顺序读取的,而运算顺序和数学的运算顺序很接近,而上面内容(byte)后紧接的只有b,所以强制类型转换约束的只有b,接下来再加1,结果仍是int型。
byte b=1; b=(byte)(b+1); System.out.println(b);
这样就没问题了!
那么:
double d=2.5; int a=(int)d/0.5; System.out.println(a);
结果如何呢?
同样的道理,(int)只约束了d,d被强制类型转换成int,但除以0.5后又自动类型提升为double。
若要成功运行,仍需(int)(d/0.5);