class A
{
public static void main(String args[])
{
byte a=3*3;//不提示精度丢失,难道在运算的时候没有自动转换为int型?
byte b=3;
byte b=b*3;//提示精度丢失,此时运算的时候怎么会自动转换成int型?
}
}
{
public static void main(String args[])
{
byte a=3*3;//不提示精度丢失,难道在运算的时候没有自动转换为int型?
byte b=3;
byte b=b*3;//提示精度丢失,此时运算的时候怎么会自动转换成int型?
}
}
解决方案 »
- JPanel里GridLayout里的TextField长宽问题
- 这个界面怎么做哦?
- 关于红黑树
- 10,11,12,13,14,15的数组问题,有个问题不记得问了?
- 编写一个Applet,用来处理指定的键盘事件:当在键盘上按下某个字母键时,就显示该键编码和字母本身
- eclipse配制JDBC出现问题??
- 编译问题请教
- JAVA新手 I/O简单的问题
- 请问怎么设置PreparedStatement的游标状态(在线)?
- jbuilder入门女生散分求助,急啊!
- 高人们来帮帮我啊,我都要被异常处理搞死了~~~~~~~~~~~~~~
- C:\upload有一些txt文件数目不定,怎么把他们的路径名一次读出来,放到String数组中呢?
以上是我的估计。。
byte b=3;
byte b=b*3//这一句因为用了变量,所以没有算出值,3是int,所以b*3的值是int敷给b时会报错
{
public static void main(String args[])
{
byte a=3*3;//不提示精度丢失,难道在运算的时候没有自动转换为int型?
byte b=3;
byte c=b*3;//提示精度丢失,此时运算的时候怎么会自动转换成int型?
}
}
byte a = 3*3;
这个时候a 站用一个字节空间。值为就,并没有出现越界的现象;
byte b = 3;
a = b*3; b多站用的空间为int类型,让int 类型的字节空间缩减为byte类型示为不安全,会导致时局丢失;
byte b=a*3;这一句错的原因其实是编译器从安全的角度来看,是不会通过的。你不要想其他,就是从数学的角度这样表达安全吗?所以在运行a*3的时候就要把结果保存为int.再赋值的时候就会错
Compiled from "test.java"
class test extends java.lang.Object{
test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: returnpublic static void main(java.lang.String[]);
Code:
0: bipush 9
2: istore_1
3: iconst_3
4: istore_2
5: iload_2
6: iconst_3
7: imul
8: istore_3
9: return}正如Don_Juan同学说的byte a=3*3;这一句在编译器眼里就是byte a=9;可能是编译器优化的结果