我正在准备Java OCA考试。
这是关于施法的问题。 我理解,对于原始数据类型,如果我们尝试将int分配给long,我们应该没问题。因为它可以自动完成。
如果我们尝试将一个long分配给一个int。它会导致编译错误,对吗?
所以,第一个问题: 当需要显式转换并且我在代码中没有这样做时,代码不会编译。有没有代码会编译的情况?
第二个问题: 我读的书实际上有一个开关盒结构,如: int num = 10 开关(num) case 10/3://做点什么..
并且作者说,在这种情况下,十进制结果将被切成3 .... 但是,这里没有明确的转换,我认为这应该是编译错误......
答案 0 :(得分:1)
关于第一个问题:如果需要显式转换,代码将不会编译。这就是"需要"装置
至于第二个问题,试试这个:
double x = 10/3;
x
也将等于3。它不是强制转换,而是/
运营商的标准行为。
答案 1 :(得分:1)
第一个问题 - 通常必须明确地进行导致数据/准确性丢失的任何类型转换。
例如:
int y = 3;
double x = y; // ok
结果存储在x中的值3.0是完全合法的。但是:
double x = 3.0;
int y = x; // give a compile error
int y = (int) x; // must explicit cast
第二个问题 - 将运算符视为函数,因此除法函数为(<T> first, <T> second)
所以除法运算符根据传递给它的两种类型改变其行为。
所以 10/3 等于 3 一个整数,因为它是两个整数的分界线
10.0 / 3 等于 3.3333333 因为它无法将double转换为int(没有明确告知这样做)因此它将int(3)转换为double并执行计算在双打并返回一个双。
因此,运算符的返回类型取决于其参数,如果可能,自动类型转换将始终向上(更准确)。