Questions tagged «boxing»

装箱是将值类型包装在引用类型包装器中,以便在需要多态(转换为对象或接口)时使用它的目的。


11
为什么在C#中需要装箱和拆箱?
为什么在C#中需要装箱和拆箱? 我知道装箱和拆箱是什么,但我无法理解其实际用途。为什么在哪里使用? short s = 25; object objshort = s; //Boxing short anothershort = (short)objshort; //Unboxing
323 c#  .net  boxing 

4
为什么Python的数组变慢?
我期望array.array比列表更快,因为数组似乎已拆箱。 但是,我得到以下结果: In [1]: import array In [2]: L = list(range(100000000)) In [3]: A = array.array('l', range(100000000)) In [4]: %timeit sum(L) 1 loop, best of 3: 667 ms per loop In [5]: %timeit sum(A) 1 loop, best of 3: 1.41 s per loop In [6]: %timeit sum(L) 1 loop, best …

17
将原始long数组转换为long列表
这可能是一个简单的,总机问题,但我的第一次尝试出乎意料地完全失败了。我想获取一组原始的long并将其转换为列表,我试图这样做: long[] input = someAPI.getSomeLongs(); List<Long> inputAsList = Arrays.asList(input); //Total failure to even compile! 什么是正确的方法?


5
C#中的拳击事件
我正在尝试收集在C#中发生拳击的所有情况: 将值类型转换为System.Object类型: struct S { } object box = new S(); 将值类型转换为System.ValueType类型: struct S { } System.ValueType box = new S(); 将枚举类型的值转换为System.Enumtype: enum E { A } System.Enum box = E.A; 将值类型转换为接口引用: interface I { } struct S : I { } I box = new S(); 在C#字符串连接中使用值类型: char c …
85 c#  value-type  boxing 

7
为什么在Java中将Integer与int进行比较会抛出NullPointerException?
观察这种情况令我非常困惑: Integer i = null; String str = null; if (i == null) { //Nothing happens ... } if (str == null) { //Nothing happens } if (i == 0) { //NullPointerException ... } if (str == "0") { //Nothing happens ... } 因此,我认为装箱操作首先执行(即Java尝试从中提取int值null),而比较操作的优先级较低,这就是引发异常的原因。 问题是:为什么要用Java这样实现?为什么装箱优先于比较参考?还是为什么他们没有null在装箱前实施验证? 此刻,当NullPointerException它与包装的基元一起抛出而不是与真实的对象类型一起抛出时,它看起来不一致。



9
通用枚举到int的C#非装箱转换?
给定通用参数TEnum始终为枚举类型,是否有任何方法可以将TEnum强制转换为int而无需装箱/拆箱? 请参阅此示例代码。这将不必要地装箱/拆箱该值。 private int Foo<TEnum>(TEnum value) where TEnum : struct // C# does not allow enum constraint { return (int) (ValueType) value; } 上面的C#是发布模式编译为以下IL(注意装箱和拆箱操作码): .method public hidebysig instance int32 Foo<valuetype .ctor ([mscorlib]System.ValueType) TEnum>(!!TEnum 'value') cil managed { .maxstack 8 IL_0000: ldarg.1 IL_0001: box !!TEnum IL_0006: unbox.any [mscorlib]System.Int32 IL_000b: ret } …
68 c#  .net  enums  boxing 

6
用泛型装箱和拆箱
创建整数集合的.NET 1.0方法(例如)是: ArrayList list = new ArrayList(); list.Add(i); /* boxing */ int j = (int)list[0]; /* unboxing */ 使用此方法的代价是由于装箱和拆箱而导致缺乏类型安全性和性能。 .NET 2.0方法是使用泛型: List<int> list = new List<int>(); list.Add(i); int j = list[0]; 装箱的价格(据我了解)是需要在堆上创建一个对象,将分配给堆栈的整数复制到新对象,反之亦然。 泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中指向(我想不是这样,因为当超出范围时会发生什么)?似乎仍然需要将其复制到堆栈中的其他位置。 到底是怎么回事?
67 c#  .net  generics  boxing  unboxing 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.