首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java双重初始化

Java双重初始化
EN

Stack Overflow用户
提问于 2009-09-18 08:56:37
回答 3查看 100.9K关注 0票数 36

这些声明有哪些不同之处?

  1. 双虚设=0;
  2. 双虚设=0.0;
  3. 双虚设=0.0d;
  4. 双虚设= 0.0D;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-18 09:25:27

在尝试了一个简单的程序(使用0和100来显示“特殊”常量与一般常量之间的区别)之后,Sun Java 6编译器将为1和2输出相同的字节码(就编译器而言,情况3和4与2相同)。

举个例子:

代码语言:javascript
复制
double x = 100;
double y = 100.0;

编译为:

代码语言:javascript
复制
0:  ldc2_w  #2; //double 100.0d
3:  dstore_1
4:  ldc2_w  #2; //double 100.0d
7:  dstore_3

但是,我在Java语言规范中看不到任何保证常量表达式的编译时扩展的东西。对于像这样的情况,会有编译时间的限制:

代码语言:javascript
复制
byte b = 100;

正如section 5.2中所指定的,但这并不完全是一回事。

也许比我眼尖的人能在某处找到一个保证...

票数 27
EN

Stack Overflow用户

发布于 2009-09-18 10:36:47

对于第一个问题:

代码语言:javascript
复制
double dummy = 0;

整数文字0通过扩大原语转换转换为双精度型,请参阅Java中的5.1.2 Widening Primitive Conversion。请注意,这完全是由编译器完成的,它对生成的字节码没有任何影响。

对于其他人:

代码语言:javascript
复制
double dummy = 0.0;
double dummy = 0.0d;
double dummy = 0.0D;

这三个是完全相同的- 0.00.0d0.0D只是编写double文本的三种不同方式。请参阅JLS中的3.10.2 Floating-Point Literals

票数 18
EN

Stack Overflow用户

发布于 2009-09-18 08:59:12

最后3个应该是相同的。右边的文字已经是双精度的了。'd‘或'D’是隐式的,当你有一个十进制的文字。

第一个略有不同,因为0是一个整型文字,它将被扩大为双精度型。我不知道在这种情况下是否会产生不同的字节代码;结果应该是相同的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1443331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档