【发布时间】:2020-02-25 15:22:41
【问题描述】:
我真的觉得转换的概念很混乱。
short a = 34;
short b = (short)34;
这两种说法的语言区别是什么? 我认为,在第一个语句中,int 文字 34 直接存储在短变量 a 中,导致 int 文字 34 转换为短文字 34。在第二个语句中,似乎 int 文字 34 首先转换为由于转换指令,短文字 34 然后存储在短变量 b 中。我是正确的还是这两种情况之一?
【问题讨论】:
-
这两个是等价的。类型转换是在第一行自动为您完成的,因此编写第二行没有用。该语法(称为强制转换)在其他情况下很有用,尝试将 int 存储在 short 中可能无法保持与 int 相同的值,因为它超出了 short 值的范围。就像
int a = 34; short b = (short)a;编译器不应该知道 a 的值为 34,它所知道的只是你将一个未知的 int 值放在一个 short 中,这可能是一个错误,所以你需要一个强制转换来执行你的选择。 -
@kumesana 谢谢,但仍然不清楚我的查询...
-
好吧,详细说明一下会很聪明,因为您的查询是这两个语句之间的功能差异是什么,我隐含地解释了第一个与第二个相同,因此没有区别。
-
@kumesana 好的,我会尽量简单。仅考虑第一条语句,Java是直接将int字面量存储到short变量中还是Java先将其转换为short字面量然后存储在short变量中?
-
我想你不明白什么是文字。文字只能是您在源代码中编写的内容。编译器不编写源代码,因此他们所做的任何事情都不会产生文字。文字是一个值,您按字面意思书写。就像 32 是字面上的值 32。虽然 a + b 可能是值 32,如果碰巧将变量 a 和 b 的值相加得出 32。32 是文字,而 a + b 不是,尽管两者是相同的值在 a + b 给出值 32 的情况下。无论如何,在第一种情况下,Java 首先将 int 值转换为 short 值,然后将其存储。
标签: java type-conversion implicit-conversion