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

为什么“短三十=3*10”是一项法律转让?

季博
2023-03-14

如果在算术运算中,short自动升级为int,那么原因是:

short thirty = 10 * 3;

short变量three的合法赋值?

反过来,这:

short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED

除此之外:

int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED

不编译,因为在未按预期进行强制转换的情况下,不允许将int值指定给short

数字文字有什么特别之处吗?

共有3个答案

郑星雨
2023-03-14

下面的答案添加了JLS部分和有关此行为的一些详细信息。

根据JLS§15.2-表达形式

有些表达式的值可以在编译时确定。这些是常量表达式(§15.28)。

融建树
2023-03-14

是的,文字大小写有一些特殊之处:10*3将在编译时计算。因此,您不需要对乘以的文字进行显式的(短)转换。

ten*three不可在编译时计算,因此需要显式转换。

如果将10个3个标记为final,那将是另一回事。

微生青青
2023-03-14

因为编译器在编译时将10*3替换为30。因此,实际上:short-three=10*3是在编译时计算的。

尝试将ten更改为最终短(使它们编译时间常量),看看会发生什么:P

使用javap-v检查字节码的两种验证(10*3final short)。你会发现两者几乎没有区别。

这是不同情况下的字节码差异。

案例1:

Java代码:main(){短s=10*3;}

字节码:

stack=1, locals=2, args_size=1
         0: bipush        30  // directly push 30 into "s"
         2: istore_1      
         3: return   

案例2:

public static void main(String arf[])  {
   final short s1= 10;
   final short s2 = 3;
   short s = s1*s2;
}

字节码:

  stack=1, locals=4, args_size=1
         0: bipush        10
         2: istore_1      
         3: iconst_3      
         4: istore_2      
         5: bipush        30 // AGAIN, push 30 directly into "s"
         7: istore_3      
         8: return   

案例-3:

public static void main(String arf[]) throws Exception {
     short s1= 10;
     short s2 = 3;
     int s = s1*s2;
}

字节码:

stack=2, locals=4, args_size=1
         0: bipush        10  // push constant 10
         2: istore_1      
         3: iconst_3        // use constant 3 
         4: istore_2      
         5: iload_1       
         6: iload_2       
         7: imul          
         8: istore_3      
         9: return 

在上述情况下,103取自局部变量s1s2

 类似资料:
  • 问题内容: 为什么 初始空间 大于“ 10”的“ 2”? 我在latin1和utf8英语归类中都尝试过: 我知道它与类型有关,因为当它被强制转换时,它可以按预期工作: 这里到底发生了什么? 编辑: 以上所有操作都是在Fedora 13中使用8.4.8完成的。但是我只是在Centos 6中使用9.04进行了测试,结果相同: 数据库清单 新编辑: 这是为了进一步混淆: 问题答案: 我认为Postgre

  • 本文向大家介绍什么是康威定律?相关面试题,主要包含被问及什么是康威定律?时的应答技巧和注意事项,需要的朋友参考一下 “任何设计系统的组织(广泛定义)都将产生一种设计,其结构是组织通信结构的副本。” —— Mel Conway 该定律基本上试图传达这样一个事实:即为了使软件模块起作用,整个团队应该进行良好的沟通。因此系统的结构反映了产生它的组织的社会边界。

  • 本文向大家介绍康威定律是什么?相关面试题,主要包含被问及康威定律是什么?时的应答技巧和注意事项,需要的朋友参考一下 康威定律指出,“设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。” 面试官可能会问反微服务面试问题,比如康威定律与微服务的关系。一些松散耦合的api形成了微服务的体系结构。这种结构非常适合小团队实现自治组件的方式。这种体系结构使组织在重组其工作流程时更加灵活。

  • 本文向大家介绍什么是阿姆达尔定律?,包括了什么是阿姆达尔定律?的使用技巧和注意事项,需要的朋友参考一下 阿姆达尔定律 假设莫妮必须参加邀请。Moni的另外两个朋友Diya和Hena也应邀参加。在某些情况下,所有三个朋友必须分别去那里,而且他们都必须在门口出现才能进入大厅。现在,莫妮(Moni)驾车而来,迪亚(Diya)乘公共汽车而赫纳(Hena)步行即可到达。现在,Moni和Diya到达那里的速度

  • 产出:10 它可能是一个整数输出,它也不携带任何垃圾值,但当我将值分配给变量a作为和高于值时,它只是按原样打印输出,告诉我这里发生了什么!

  • 问题内容: 例: 第一个参数采用Double并将其保存在该方法范围中。但是,什么是和? 我阅读了这篇文章,却找不到任何相关内容:https : //developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Methods.html 问题答案: 这就是Swift模仿目标C的命名参