![]() |
1
45
Java自动装箱/解包不能达到允许去引用一个原语的程度,因此编译器会阻止它。你的编译器仍然知道
自动修改主要在赋值或参数传递期间有用——允许您将原语作为对象传递(反之亦然),或者将原语分配给对象(反之亦然)。 所以不幸的是,你必须这样做:(尊敬的帕特里克,我转向你的方式)
|
![]() |
2
27
贾斯汀说的话也是一样,但你应该这样做:
它节省了一两个分配,而且可读性更强。 |
![]() |
3
15
另一种方法是使用:
对于每个基元类型和
见 http://java.sun.com/javase/6/docs/api/java/lang/String.html . |
![]() |
4
9
还有更多的缺点,这是一个微妙的话题。检查 this 出:
这里将打印“long”(长),因为编译器选择扩展而不是自动氧化。使用自动氧化时要小心,否则不要使用它! |
![]() |
5
5
最接近示例的有效语法是
当编译器完成时,这相当于
但是,它的性能不如传统用法好,
编辑:如果投反对票的人评论为什么这没有帮助,我会很感激的。 |
![]() |
6
1
在C中,整数既不是引用类型,也不必装箱以便 托斯特林() 被召唤。他们 是 但是,在框架中考虑对象(作为一个值类型,因此它们具有值语义)。在clr中,基元上的方法是通过“间接”将它们加载到堆栈(ldind)来调用的。 |
![]() |
7
1
正如每个人都指出的,自动氧化可以简化一些代码,但不能假装原语是复杂的类型。 同样有趣的是: "autoboxing is a compiler-level hack" 在Java中。自动装箱基本上是添加到Java上的一种奇怪的蹩脚货。退房 this post 了解更多关于它有多奇怪的细节。 |
![]() |
8
1
如果Java定义了某些静态方法对基元类型进行操作,并在编译器中编译一些语法糖,那么这将是有帮助的。
相当于
我不认为这样的特性会导致与任何根据当前规则编译的代码不兼容,而且在许多情况下它会帮助减少语法混乱。如果Java是对AutoBox原语进行引用的,人们可能会认为它是将撤销引用语法映射到静态方法调用(这实际上是.NET中发生的),因此以这种形式编写的操作不会比等效静态方法调用更昂贵。添加一个新的语言特性来鼓励人们编写糟糕的代码(例如自动装箱取消引用的原语)似乎不是一个好主意,尽管允许取消引用的样式方法可能是。 |