当前位置: 首页 > 知识库问答 >
问题:

需要帮助理解为什么这个代码不能编译[重复]

金瑞
2023-03-14

说明:

这实际上是一个诡计问题,因为这段代码不会编译!正如您在第1章中所记得的,浮点文字被假定为双倍,除非后缀有一个f,如2.1f。如果正确地将该值设置为2.1F,那么升级将与上一个示例类似,两个操作数都升级为double,结果将是一个double值。

但我不明白。如果浮动y=2.1;假设是双倍,则不需要将变量y提升到双倍。而我更困惑的是下一个问题,那就是:

共有1个答案

孟英光
2023-03-14

忽略char,Java将推广如下数值类型:

byte > short > int > long > float > double

这些被称为加宽转换。参见JLS§5.1.2。为详细信息拓宽基元转换。

二进制运算符将升级为intlongfloatdouble,取最接近运算符的两个值,即结果永远不会是byteshort。示例:byte+short将两边都提升为int。参见JLS§5.6.2。详细信息的二进制数字提升。

double x = 39.21; // double constant  to  double  (identity conversion)
float y = 2.1; // fails because double constant cannot promote to float

如果代码已经编译,那么x+y数据类型是什么?

x + y  // double + float  promotes to  double

答:

下一部分:

short x = 14;  // narrowing conversion of  int constant  to  short
float y = 13;  // widening conversion of  int constant  to  float
double z = 30; // widening conversion of  int constant  to  double
x * y        // short * float  promotes to  float
(x * y) / z  // (float) / double  promotes to  double
 类似资料:
  • 在方法或类范围内,下面的行编译(带有警告): 在类作用域中,变量获取其默认值,以下给出未定义引用错误: 这难道不是第一个应该以相同的未定义引用错误结束吗?或者第二行应该编译?或者我错过了什么?

  • 奇怪的是,标记为“OK”的行编译得很好,但标记为“Error”的行失败了。它们看起来基本上是一样的。

  • 问题内容: 为什么要编译Python脚本?您可以直接从.py文件运行它们,并且效果很好,那么在性能上有什么优势吗? 我还注意到,我的应用程序中的某些文件被编译为.pyc,而另一些则没有,为什么? 问题答案: 它被编译为字节码,可以更快,更快速地使用。 无法编译某些文件的原因是,每次运行脚本时都会重新编译与之一起调用的主脚本。所有导入的脚本将被编译并存储在磁盘上。 Ben Blank的 重要补充:

  • 问题内容: 这段代码使我凝视了几分钟: 我以前从未见过,而且我也不知道Java有一个“ loop”关键字(NetBeans甚至没有像关键字一样给它上色),并且它在JDK 6中可以很好地编译。 有什么解释? 问题答案: 这不是一个。 用法:

  • 我有这个密码: 这给我留下了编译器对我大喊大叫: 我花了很长时间才明白我必须改变Vec 代码现在编译,但我完全不明白这里到底有什么问题。为什么要在Vec定义中发送代码?我的意思是,这个特性已经实现了发送克隆。对我来说,这看起来相当多余。 有人能和我分享他的智慧吗,为什么我必须这样修改代码?