问题描述
我不确定我的问题是否足够清楚,所以我会举例说明。让我们认为我们有下一个表达式:
byte byteNumber = 10 * 10;
我理解文字数 10
默认情况下是一个整数,所以表达式 10 * 10
也会产生一个整数,但是 Java 将它“降级”为一个字节值,因为变量(其中结果存储)是一个字节。
但是,为什么这会有所不同?
int x = 10;
int y = 10;
byte byteNumber = x * y;
行字节 byteNumber = x * y;
被标记为错误。我理解表达式 x * y
产生一个整数,但不像文字那样“降级”。即使只有一个变量,如 x * 10
,结果也不会降级。为什么?我相信这与变量类型有关,但默认情况下文字是整数,它们可以“降级”。
另一个我正在苦苦挣扎的例子是:我们可以将整数文字赋值给 byte、short 或 char 类型的变量,Java 会自动将整数转换为我们声明的变量类型,例如:
short a = 10;
byte b = 12;
另一方面,为什么我们不能做这样的事情?
float c = 12.0;
是的,12.0
是一个双精度值,但为什么不能将它“降级”为浮点数并强制我们将文字声明为浮点数 12.0F
?我知道这将代表信息丢失。但是,将整数转换为 short 或 byte 也代表信息丢失,不是吗?
最后,为什么我们可以将整数文字分配给类型为 short 或 byte 的变量...
short a = 10;
byte b = 12;
但是我们不能将整数作为参数传递给需要短/字节参数的方法?
public void newMethod(short x,byte y){
...
}
。 . .
newMethod(10,2)
如果您能搜索一些我可以阅读此类内容的链接,那就太好了(因为我不确定如何搜索我遇到的这些具体问题)。
先谢谢大家。
解决方法
您可以查看以下两个链接:
- Why explicit type casting required from double to float but not from int to byte? (我已经在评论中分享的那个)
- Implicit type cast not working for method parameters?
顺便说一下,#1 StackOverflow 贡献者 Jon Skeet 回答了这两个问题 :)