草庐IT

autoboxing

全部标签

java - Numbers 上不需要的自动装箱魔法

下面的程序分别打印'false'和'true':Numbern=true?newLong(1):newDouble(2.0);System.out.println(ninstanceofLong);System.out.println(ninstanceofDouble);所以它不会是Long而是Double。但是,它在普通类上按预期工作:拥有classB{}classD1extendsB{}classD2extendsB{}这将打印“真”:Bb=true?newD1():newD2();System.out.println(binstanceofD1);这意味着它与上面的示例不同。我

java - 扩大和装箱 Java 原语

扩展和装箱Java原语。我知道不可能将包装类从一个扩展到另一个,因为它们不是来自同一继承树。为什么不能将基元扩展为另一种基元类型并自动装箱扩展的基元?鉴于可以将字节参数传递给需要int的方法,为什么不能将以下示例中的字节扩展为int,然后装箱为Integer?classScjpTest{staticvoidgoInteger(Integerx){System.out.println("GoingwithanInteger");}staticvoidgoInt(intx){System.out.println("Goingwithanint");}publicstaticvoidmain

原始类型的 Java 迭代器

我有一个如下形式的Java类:classExample{privatebyte[][]data;publicExample(ints){data=newbyte[s][s];}publicbytegetter(intx,inty){returnbyte[x][y];}publicvoidsetter(intx,inty,bytez){byte[x][y]=z;}}我希望能够像这样使用迭代器在外部迭代私有(private)数据:for(byteb:Example){;/*做一些事情*/}我试图实现一个私有(private)迭代器类,但我遇到了问题:privateclassExampleI

java - 使用原始 double 值初始化 Double 对象

当一个java.lang.Double对象在没有调用构造函数而是使用原语的情况下被初始化时会发生什么?它似乎有效,但我不太确定为什么。编译器是否正在进行某种隐式转换?这是使用Java5。publicclassFoo{publicstaticvoidmain(String[]args){Doubled=5.1;System.out.println(d.toString());}} 最佳答案 这叫做Autoboxing这是Java5中添加的一个特性。它会自动在基本类型和包装类型之间进行转换,例如double(基本类型)和java.lan

Java 自动装箱/拆箱怪异

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicates:Booleans,conditionaloperatorsandautoboxingJava,GoogleCollectionsLibrary;problemwithAbstractIterator?下面的代码产生一个NPE:Integertest=null;Integertest2=true?test:0;System.out.println(test2);要正确无一异常(exception)地打印出“null”,需要以下代码:Integertest=null;Integertest2=true?test

c# - 自动装箱和拆箱在 Java 和 C# 中的行为是否不同

我正在手动将代码从Java(1.6)转换为C#,发现基元(int和double)的行为有些困难。在C#中,似乎几乎所有的转换都是自动发生的Listlist1=newList();//legal,C#doubled0=3.0;list1.Add(d0);//legal,C#Doubledd=2.3f;//legal,C#list1.Add(dd);//legal,C#Listlist2=newList();//legal,C#doubled1=3.0;list2.Add(d1);//legal,C#list2.Add(2.0);//legal,C#doubled2=list2.get(0

Java 自动拆箱 - 是否有编译器警告?

我是Java自动装箱的忠实拥护者,因为它可以节省大量丑陋的样板代码。但是,我发现在Number对象可能为null的某些情况下,自动拆箱会造成混淆。有什么方法可以检测带有javac警告的代码库中发生自动拆箱的位置吗?任何其他仅检测拆箱事件的解决方案(例如FindBugs或特定于Eclipse的编译器警告)将不胜感激,因为我找不到任何解决方案。澄清一下,我不希望在装箱时生成任何警告-仅在拆箱时生成。下面是一些可能导致令人困惑的NullPointerExceptions的代码的简单示例:classTest{privateIntegervalue;publicintgetValue(){ret

java - Java Boolean 包装器类是如何实例化的?

在java中,我可以这样写代码Booleanb=true;它会起作用的。我现在有一个包含值“true”的对象。这是如何运作的?为什么我不必通过构造函数传递值?像这样:Booleanb=newBoolean(true);此外,我能否创建可以以类似方式实例化的自定义类?如果有,那叫什么?这样我就可以做这样的事情:Foobarfoobar="Test";因此有了我自己的包装器类。谢谢 最佳答案 不,你不能做后者。前者称为autoboxing并在Javav1.5中引入以自动包装,原始包装器中的原语。使用泛型和/或集合时,可以清楚地看到自动装

java - 为什么我的原始类型参数方法不覆盖包装类型参数的父类(super class)方法?

publicclassWrapperClasses{voidoverloadedMethod(NumberN){System.out.println("NumberClassType");}voidoverloadedMethod(DoubleD){System.out.println("DoubleWrapperClassType");}voidoverloadedMethod(LongL){System.out.println("LongWrapperClassType");}publicstaticvoidmain(String[]args){inti=21;WrapperCla

java - 通过传入单个元素原始数组来避免装箱

我正在使用一个将Object类型作为其输入的接口(interface)。这对我来说很不幸,因为我有原始数据,有时需要通过接口(interface)传入。这当然迫使我装箱。分析显示此区域是代码中的热点。因此,我正在探索使该领域更快的替代方案。我今天的一个想法是预先分配一个静态原始数组,并将原始值存储在其中,然后将数组传递(然后在接口(interface)的实现中,从数组中取出双.我已经写了一些代码来测试这个。对于相当高的值(1000万),我发现数组方法明显更快。随着我增加测试的迭代次数,两者会收敛。我想知道以前是否有人考虑过这种方法,以及是否有任何关于如何很好地进行基准测试的建议。示例代