草庐IT

c# - 将结构转换为通用接口(interface)时是否有装箱/拆箱?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Structs,InterfacesandBoxing来自MSDN:http://msdn.microsoft.com/en-us/library/yz2be5wk.aspxBoxingistheprocessofconvertingavaluetypetothetypeobjectortoanyinterfacetypeimplementedbythisvaluetype.但是通用接口(interface)呢?例如,int派生自IComparable和IComparable.假设我有以下代码:voidfoo(

C# 线程 - 锁定对象

我正在尝试在C#应用程序中锁定“盒装”对象,这不可能吗?classt{System.Objectt_x=newobject();publict(intp){t_x=p;}publicvoidw(){lock(t_x){for(inti=0;i在另一个类中我可以启动2个线程:Threadb1=newThread(newThreadStart(t1.w));b1.Start();Threadb2=newThread(newThreadStart(t1.w));b2.Start();但是该部分未锁定。当我锁定一个任意对象(即一个创建但未修改为对象a=newobject())时,它锁定得很好。

c# - 使用 out 和 ref 参数时的装箱和拆箱

当方法接受ValueType的out/ref参数时是否会发生装箱/拆箱? 最佳答案 对于ref关键字它已经在MSDN上提到了那:Donotconfusetheconceptofpassingbyreferencewiththeconceptofreferencetypes.Thetwoconceptsarenotthesame.Amethodparametercanbemodifiedbyrefregardlessofwhetheritisavaluetypeorareferencetype.Thereisnoboxingofava

java - 为什么 Java 不支持强制转换和自动装箱?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Java:Longresult=-1:cannotconvertfrominttolong例如Integerfoo=4和Longfoo=4L都可以编译,但是Longfoo=4不能。这有什么道理吗?

java - 使用 Java 进行加宽和装箱

在Java编程语言中加宽和装箱不起作用,但在下面的示例中它是如何工作的?finalshortmyshort=10;IntegeriRef5=myshort;为什么会这样?这和先加宽然后加框不一样吗?但是如果我写下面的代码:finalintmyint=10;LongmyLONG=myint;为什么它不起作用? 最佳答案 根据其他人的说法,我可以确认我可以使用Eclipse编译器编译您的第一个示例,但不能编译第二个示例。使用javac编译器,两者都不会编译,如Vlad所述Thisseemstobeabugineithercompiler

java - int.class.isInstance(Object) 是矛盾的吗?

这是一个例子:publicbooleancheck(Classclazz,Objecto){returnclazz.isInstance(o);}check(int.class,7);//returnsfalse自isInstance接受Object,它不适用于int,因为int是原始类型并自动装箱为Integer.那么是否有可能编写一个通用的检查方法?或者我应该确保clazz的类型是Class? 最佳答案 并不是所有的Class对象都代表类/引用类型;还有Class对象表示原始类型。这很有用,因为在对字段和方法使用反射时,您经常需

java - C# 中的 "Boxing"是什么意思(相对于 Java)?

我是在Java背景下学习C#的,对ValueType有一些困惑。我阅读MSDN的C#vsJava的理解概述是原语是对象而不是包装器。如果是这样,为什么他们需要boxed调用方法?看起来它们的含义与Java的自动装箱不同,但我不确定是什么。它看起来更像是类型转换。 最佳答案 装箱是Java和C#中非常相似的概念。不同之处在于它发生的时间:Characterch='a';这将导致Java中的装箱,因为'a'是原始类型而Character是类(包装器)。在C#中:Charch='a';不会引起装箱因为Char不是原始类型而是值类型类。要在

java - 自动装箱和泛型

我其实对这两个话题都很困惑,谁能解释一下。ArrayListqueryParms=newArrayList();上面的是泛型还是自动装箱,什么是拆箱?这是最佳做法吗?有人说自动装箱是件坏事。如果我使用泛型,我可以避免自动装箱和拆箱吗? 最佳答案 以上是泛型的例子。自动装箱是编译器自动转换包装器类型中的基本类型,反之亦然。例如,在您的情况下,来自Long变量中的long变量:longparam=13L;queryParms.add(param);使用泛型?是的。它允许您指定列表将包含的内容。你应该使用它们。使用自动装箱?是的,它简化了

c# - 性能,Java 泛型

Java中的泛型是否比集合具有任何性能优势。例如,在C#中有一个性能优势,因为它有助于避免装箱/拆箱,但据我所知,在Java中,在字节码级别没有泛型的“想法”,因此在编译后它具有与相同的字节码用于Collection。那么说没有性能优势是对的吗? 最佳答案 我认为此链接非常有用。ComparingJavaandC#Generics正如您在C#中所说,性能将受益,因为泛型可帮助您避免装箱/拆箱。深入的原因是.NET泛型支持值类型,但Java泛型不适用于原始类型,这就是它无法消除装箱/拆箱开销的原因。但是您仍然可以进行编译时类型检查,并

java - 自动装箱无法将 int 转换为 Integer

我是一个完全的初学者,我正在尝试学习java。我了解了Autoboxing和Unboxing的概念here.我正在使用Java版本1.8.0_05并使用Eclipse。代码是:classTest{publicstaticvoidmain(String[]args){Integeriob=100;//showserror->Typemismatch:CannotconvertfrominttoInteger}}感谢您的帮助。 最佳答案 您需要将语言级别至少设置为1.5/5.0才能使用自动装箱/拆箱。在Project-->Propert