假设:
int x = 10;
double d = -3.0;
boolean f = false;
1
为什么在将它作为int转换之后,以下内容仍为double ...对于第二个,为什么在定义为long时输出float?:
(int) d / 2.0
(long) d * 2f
2
为什么以下第一个打印字符串(?),后者打印一个数字?
"2" + x + 2
"3" + 3 * x
但是以下内容出现错误:
"5" + i + 2
第3
此外,随后,实际发生了什么,结果是什么?
d++ + d
4
当使用Math.round时,为什么将下面的double转换为float,或者它们是同一个东西?
Math.round(x / d)
答案 0 :(得分:2)
<强> 1 强>
此:
(int) d / 2.0
与此相同:
((int) d) / 2.0
也许你是这个意思?
(int)(d / 2.0)
<强> 2 强>
他们都“打印”字符串(假设您正在讨论将它们用作System.out.println
的参数)。
这些:
"2" + x + 2
"3" + 3 * x
与以下内容相同:
("2" + x) + 2
"3" + (3 * x)
与这些相同(假设x = 10
):
("2" + 10) + 2
"3" + 30
与这些相同:
"2102"
"330"
第3 强>
我不记得这里应该发生什么。但是你永远不需要/想要编写这样的代码,所以没关系!
<强> 4 强>
Math.round
的返回类型是整数类型,而不是浮点类型。
答案 1 :(得分:1)
(int) d / 2.0
(long) d * 2f
你仍然使用浮点数学,即一个操作数仍然是double / float,因此结果是double / float。
"2" + x + 2
"3" + 3 * x
第一个只是连接,即表达式的类型是String
,因此所有操作数都转换为字符串。对于x=1
,您需要"212"
。
第二个是操作符优先级,即在*
之前计算+
,因此表达式3 * x
是一个整数数学运算,其结果将由{转换为字符串} {1}}。
"3" + result
错误在于您的代码,发布异常。很可能"5" + i + 2
未定义。
i
查看运算符优先级和后增量运算符。 d++ + d
将返回x++
的值,然后递增它。然后,x
的先前值将添加到新值。您可以认为它与x
类似。
使用Math.round时,为什么将下面的double转换成浮点数,或者它们是否相同?
Math.round(x / d)
没有转换,只是一个重载的方法(一个采取双倍,一个采取浮动)。基本上x + (x+1)
的精度低于float
,但两者都是浮点数。
答案 2 :(得分:1)
为什么在将它作为int转换之后,以下内容仍为double ...对于第二个,为什么在定义为long时输出float?:
(int) d / 2.0
(long) d * 2f
因为广告(int)
运算符的优先级高于/
和*
运算符。
你应该这样读:
((int) d) / 2.0
((long) d) * 2f
为什么以下第一个打印字符串(?),后者打印一个数字?
"2" + x + 2
"3" + 3 * x
我认为在两种情况下都是字符串,你必须“读取”这样的表达式:
("2" + x) + 2
"3" + (3 * x)
但是以下内容出现错误:
"5" + i + 2
错误是什么?
此外,通过以下内容,实际发生了什么以及结果是什么?
d++ + d
这是一系列行动:
当使用Math.round时,为什么将下面的double转换为float,或者它们是同一个东西?
Math.round(x / d)
它会转换为long
,因为Math.round(double)
的返回类型为long
答案 3 :(得分:0)
一个问题太多了。
i
。Conversions and Promotions JLS section也可能有所帮助;你的很多问题都在那里得到解答。