关于显式铸造的JAVA SE7问题

时间:2014-05-06 22:56:58

标签: java casting

我正在准备Java OCA考试。

这是关于施法的问题。 我理解,对于原始数据类型,如果我们尝试将int分配给long,我们应该没问题。因为它可以自动完成。

如果我们尝试将一个long分配给一个int。它会导致编译错误,对吗?

所以,第一个问题: 当需要显式转换并且我在代码中没有这样做时,代码不会编译。有没有代码会编译的情况?

第二个问题: 我读的书实际上有一个开关盒结构,如:     int num = 10     开关(num)         case 10/3://做点什么..

并且作者说,在这种情况下,十进制结果将被切成3 .... 但是,这里没有明确的转换,我认为这应该是编译错误......

2 个答案:

答案 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并执行计算在双打并返回一个双。

因此,运算符的返回类型取决于其参数,如果可能,自动类型转换将始终向上(更准确)。