JAVA数据类型的问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:22:06
public class q {
public static void main (String[] agrs) {
int a = 1;
double s = 2.0;
int z = 0;
z += a * s;
System.out.print(z);
}
} 如上!~ 变量 Z 的类型是 double z=0.0的话 那 么下面z = a * s就不会出现问题 可是如果 是int z = 0 的话 直接写成 z = a * s 就会提示错误了 变成 z += a * s 后 就对了!~ z = z + a * s 后 自动转换??? 还是??? 为什么!~~?

这样写:
public class q {
public static void main(String[] agrs) {
int a = 1;
double s = 2.0;
int z = 0;
z = (int) (a * s) ;
System.out.print(z);
}
}
z = a * s ;这样不行 说明它是无法从double自动转化成int
需要强制类型转化,因为double精确度高,他不给自动转化,但自己要强制转化会丢失精度。
z = z + a * s; 这样也不行 原因一样z + a * s是个double型的,不能给int型 。
z += s*a ; 这样可以,因为 += 有个功能能把 s*a 转化成int 型 ,它
是把 后面的内容(s*a) 转化成前面一样的类型(z)再把和赋给 z .(所以使用这个的时候要注意精度丢失这个问题)

数据类型转换出了问题。
数据类型中存在隐式转换,double * int =double;也就是a*s的结果应该是double类型,而Z是int类型所以会抱错。
关于隐式转换,方向是shor-->int --long-->double.不能犯过来转,也就是double自动转换为int是不行的。可以强转。
上面例子写成
z += (int)a * s;或者s += a * s; 就没有错误了。

这是我的个人理解,仅供参考,如有不对,请多多指教!

一个int和double相乘时,结果会自动转行成double类型!
double比int类型高登记!要int装载double型的,好像必须强转换!而double装载int时则不需要强制转换,它会自己转换!

高级的数据类型(占字节数多的)不能直接转换为低级(占字节数少的)的,必须用强制类型转换!
但低级的可以直接转换高级的!
int可以直接赋给一个double型的变量(系统自行转换)
但是反过来就必须强制类型转换了!
上面的表达式:a