将其放入代码中-哪个具有更好的性能(如果有区别的话)?
鉴于这种:
public class Customer
{
....
public Boolean isVIP(){...}
...
}
哪个更快?
public void handleCustomer(Customer customer)
{
if (customer.isVIP()) // Auto Unboxing
{
handleNow(customer);
}
else
{
sayHandlingNowButQueueForTomorrow(customer);
}
}
或这个:
public void handleCustomer(Customer customer)
{
if (customer.isVIP().booleanValue()) // Explicit unboxing
{
handleNow(customer);
}
else
{
sayHandlingNowButQueueForTomorrow(customer);
}
}
它们之间没有区别,您可以在字节码中进行验证:
public class ImplicitTest {
public static void main(String[] args) {
Boolean b = true;
boolean i = b;
boolean e = b.booleanValue();
}
}
运行javap
以查看其编译结果:
javap -c ImplicitTest
这是输出:
Compiled from "ImplicitTest.java"
public class ImplicitTest extends java.lang.Object{
public ImplicitTest();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: invokestatic #2; //Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
4: astore_1
5: aload_1
6: invokevirtual #3; //Method java/lang/Boolean.booleanValue:()Z
9: istore_2
10: aload_1
11: invokevirtual #3; //Method java/lang/Boolean.booleanValue:()Z
14: istore_3
15: return
}
如您所见-第5,6,9行(隐式)与10、11、14行(显式)相同。
本文向大家介绍自动装箱和拆箱?相关面试题,主要包含被问及自动装箱和拆箱?时的应答技巧和注意事项,需要的朋友参考一下 自动装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。 比如:把int转化成 Integer,double转化成 Double,等等。反之就是自动拆箱。 原始类型: boolean,char,byte,short,int,long,float,double
问题内容: 从JDK 5.0开始,自动装箱/拆箱是在Java中引入的,这种技巧很简单而且很有帮助,但是当我开始测试包装器类和原始类型之间的不同转换时,我真的很困惑自动装箱的概念在Java中的工作原理: Boxing 尝试不同的情况下后(),这是由编译器所接受的唯一情况是,当值的上做作运算符右侧的类型是int。当我查看源代码时,发现它仅实现一个带参数的构造函数。 因此,我的结论是,自动装箱的概念基于
我的问题是在遵循图片中的函数、应用程序和单子教程及其JavaScript版本时提出的。 当文本说functor从上下文中展开值时,我理解a- 我的问题是,整件拆开包装的事情有什么神奇之处?我的意思是,有一些自动打开“范围”变量的语言规则有什么问题?在我看来,这个操作只是某种表中的一个查找,其中符号对应于整数。 我的问题受到JavaScript版本的启发,其中是原型数组实例。所以展开确实不是火箭科学
问题内容: 我有一个扩展LinkedList类的类。这是一段代码摘录: 预期会返回自动拆箱的int值。但是由于某种原因,编译器会抛出一个错误,指出类型不兼容,所需的类型为int,找到的类型为Integer。这可以在不同的类中很好地工作!是什么赋予了?:( 问题答案: 这是因为你有追求。 通常,您使用类型参数:,但是使用了。也就是说,您创建了一个类型参数(阴影)。 就目前而言,您的课程相当于 删除t
请帮我想想为什么这行不通。(这不是一个实际问题,而是OCPJP考试的心理练习。) //编译器错误:类型不兼容;必需:短,找到:整数 我假设编译器尝试在没有(或之前)拆箱的情况下先进行强制转换,而例如算术操作(iBoxediBoxedi)将首先拆箱。因此,是否可以说自动装箱/取消装箱在操作顺序(一元、算术、关系、逻辑、条件、分配)中占有一席之地,它到底在哪里? 我在下面的源代码中读到了有关强制转换的
本文向大家介绍浅析C# 装箱和拆箱,包括了浅析C# 装箱和拆箱的使用技巧和注意事项,需要的朋友参考一下 Object类型是所有类型的基类,其下面有ValueType类型。什么结构啊,枚举啊,都继承ValueType,这些都是值类型。其他的什么类啊,数组啊,字符串啊等等都是引用类型。 简单的说,直接继承Object的都是引用类型,继承ValueType的都是值类型。 那样的话,像整形这样的结构按理说