草庐IT

java - 为什么自动装箱/拆箱在这里失败?

在下面的程序中,结果是0.0被认为小于Double.MIN_VALUE。为什么?我们有一个解决方案(仅使用Doubles并使用compareTo),我想了解为什么拆箱在这里失败。importjava.util.Date;importjava.util.Calendar;importjava.math.BigDecimal;publicclassTest{publicstaticvoidmain(String[]args){doublemax=99999.9999;doublemin=Double.MIN_VALUE;Doubletest=0.0;System.out.println(m

Java - 装箱整数 - 为什么它返回 true 如果应该返回 false

我正在比较两段代码Integerx=newInteger(0),y;y=x;x+=0;System.out.println(x==y);//printsfalse和Integerx=0,y;y=x;x+=0;System.out.println(x==y);//printstrue不应该都返回false吗?它不是原始变量,并且在第二个代码中以某种方式即使在添加零之后,它也会打印true。我知道装箱(对于从-128到127的整数),但为什么装箱在第二段代码而不是第一段代码中起作用? 最佳答案 Shouldn'tbothreturnfa

java - 为什么 Java 中的自动装箱允许我有 3 个可能的 boolean 值?

引用:http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html"Ifyourprogramtriestoautounboxnull,itwillthrowaNullPointerException."如果您尝试将null分配给boolean值,javac会给您一个编译时错误。说得通。不过,将null分配给boolean值是可以的。我想也是有道理的。但是让我们考虑一下这样一个事实,即当您尝试对null进行自动拆箱时,您会得到一个NPE。这意味着如果不进行空值检查或异常处理,您就无法安全地对boolean值执行bo

java - 如何检测/避免 Java 中的自动装箱?

我正在开发一个不断处理千兆字节数据的程序,主要是原始数据和字符串。我需要避免通过自动装箱将原语转换为对象,因为这会增加堆大小和GC时间。目前,我在VisualVM中进行更改并运行代码,发现我有数百万个额外的整数、短整型或对象。然后,我将调试器中的代码单步执行到我的库和JDK类中,以查找装箱发生的位置。有没有工具可以帮助解决这个问题?我使用Intellij作为我的IDE。在Intellij中,您可以使用检查来查找您自己代码中的自动装箱,但它似乎没有扩展到库代码。为此,请从菜单中选择:Analyzye>>按名称运行检查...然后在提示符下输入“auto”。应出现自动装箱检查以供选择。但是,

java - 如何在 Hamcrest 中使用(原始的)自动装箱/加宽?

我遇到了https://code.google.com/p/hamcrest/issues/detail?id=130为Hamcrest匹配器添加一些语法糖。但这个想法被Hamcrest开发人员拒绝了。还有其他聪明的想法可以通过避免在long后面键入L来提高测试的可读性吗?@Testpublicvoidtest1(){intactual=1;assertThat(actual,is(1));}@Testpublicvoidtest2(){longactual=1L;assertThat(actual,is(1));//failsasexpectedisbutresultwas//ass

java - 构建检测自动装箱的工具?

有谁知道任何样式检查器或构建工具可以标记构建服务器的自动装箱和拆箱?我已经有了eclipse选项来标记它,但并不是项目中的每个人都使用相同的IDE或相同的设置。在构建端找到它似乎是检测它可能潜入项目何处的唯一方法。 最佳答案 Findbugs将识别许多specificcases可能有问题的拳击问题。我直接链接到一个示例,但如果您在该页面中按Ctrl-F键选择“框”,您会很容易找到其余部分。我认为寻找具体的拳击问题比对所有事情进行全面标记要好。(换句话说,我同意280Z28) 关于java

Java 与 Scala 泛型和装箱的互操作性问题

假设我有这个Scala特性:traitUnitThingy{defx():Unit}提供Java实现非常简单:importscala.runtime.BoxedUnit;publicclassJUnitThingyimplementsUnitThingy{publicvoidx(){return;}}现在让我们从一个通用特征开始:traitFoo[A]{defx():A}traitBarextendsFoo[Unit]上面的方法行不通,因为x返回的单元现在是装箱的,但解决方法很简单:importscala.runtime.BoxedUnit;publicclassJBarimpleme

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 - 为什么将短变量赋值给 Integer 引用会产生编译时错误?

我在Java中有以下代码:classBoxing{publicstaticvoidmain(Stringargs[]){shorts=10;IntegeriRef=s;}}为什么编译会报错?如果我在表达式中将short显式转换为整数,它会成功编译。因为我在表达式中使用了一个short类型,所以在不需要显式大小写的情况下,默认情况下它不是应该是整数的类型吗? 最佳答案 你想在这里发生两件事:扩大和自动装箱。不幸的是,Java只能自动完成两者之一。原因很可能是自动装箱引入的时间很晚(在Java5中),他们必须小心不要破坏现有代码。你可以