草庐IT

java - Java 7 允许从 Number 转换为 double 吗? (自动装箱)

一位同事检查了这段代码:Numbern=...;doublenr=n==null?0.0:(double)n;然后另一位同事提示说这没有编译,这正是我所期望的。然而,事实证明我已经从SVN中提取了这段代码并且一切正常。我们都在eclipse中将Java版本设置为1.7,结果代码在eclipse4.4.2(Luna)下编译正常,但在4.2.2下编译失败。我通过将转换替换为n.doubleValue()解决了这个问题。现在真正的问题是:为什么这首先会被接受?它当然应该在转换为Double而不是double时起作用,但我认为直接从Number转换为double被禁止。那么,这是同时修复的ec

java - 为什么将自动装箱标记为警告?

我知道自动拆箱应该小心,因为要拆箱的引用可能为空。为什么自动装箱也被标记为警告?我在这里遗漏了一些陷阱吗? 最佳答案 我打算禁用此Eclipse警告,但以下文章让我考虑不这样做。我仍然不完全确定,但在我看来这些可能是避免自动装箱的充分理由。https://effective-java.com/2010/05/the-advantages-and-traps-of-autoboxing/ 关于java-为什么将自动装箱标记为警告?,我们在StackOverflow上找到一个类似的问题:

java - Java 中应该避免自动装箱吗?

在某些情况下,方法需要基本类型double并且您将Double对象作为参数传递。由于编译器对传递的对象进行拆箱,这会增加内存使用量还是降低性能? 最佳答案 这是JavaNotes在autoboxing上所说的内容:PreferprimitivetypesUsetheprimitivetypeswherethereisnoneedforobjectsfortworeasons.Primitivetypesmaybealotfasterthanthecorrespondingwrappertypes,andareneverslower.

java - NullPointerException 通过 Java 三元运算符的自动装箱行为

前几天我遇到了一个非常奇怪的NullPointerException,这是由三元运算符中的意外类型转换引起的。鉴于此(无用的示例性)功能:IntegergetNumber(){returnnull;}我期望以下两个代码段在编译后完全相同:Integernumber;if(condition){number=getNumber();}else{number=0;}对比Integernumber=(condition)?getNumber():0;.事实证明,如果condition为true,则if语句工作正常,而第二个代码段中的三元操作抛出一个空指针异常。似乎三元操作已经决定在将结果自动

java - 自动装箱/拆箱如何在 Java 中工作?

从JDK5.0开始,Java引入了自动装箱/拆箱。这个技巧简单而有用,但是当我开始测试包装类和原始类型之间的不同转换时,我真的很困惑自动装箱的概念在Java中是如何工作的。例如:拳击intintValue=0;IntegerintObject=intValue;bytebyteValue=0;intObject=byteValue;//==>Error在尝试了不同的情况(short、long、float、double)之后,唯一的情况是被编译器接受的是当修饰运算符右边的值的类型是int时。当我查看Integer.class的源代码时,我发现它只实现了一个带有int参数的构造函数。所以我

java - 为什么在自动装箱期间发生 final long 到 Byte 的编译错误,但 final int 到 Byte 是可以的?

将int和short类型的常量自动装箱到Byte时没有错误,但long类型do有错误。为什么?finalinti=3;Byteb=i;//noerrorfinalshorts=3;Byteb=s;//noerrorfinallongl=3;Byteb=l;//error 最佳答案 来自JLSSec5.2,"Assignmentcontexts"(强调我的):Inaddition,iftheexpressionisaconstantexpression(§15.28)oftypebyte,short,char,orint:Anarro

关于自动装箱和对象相等性/同一性的 Java 问题

这个问题在这里已经有了答案:WeirdIntegerboxinginJava(12个答案)关闭6年前。publicclassMain{/***@paramargsthecommandlinearguments*/publicstaticvoidmain(String[]args){//TODOcodeapplicationlogichereinta1=1000,a2=1000;System.out.println(a1==a2);//=>trueIntegerb1=1000,b2=1000;System.out.println(b1==b2);//=>falseIntegerc1=10

Java 8 自动装箱 + 泛型 : different behaviour with variable vs. 方法

我发现一段代码在从Java7切换到Java8后停止编译。它不包含任何新的Java8内容,例如lambda或流。我将有问题的代码缩小为以下情况:GenericDatag=newGenericData(1d);Doubled=g==null?0:g.getData();//typeerror!!!您可能会猜到GenericData的构造函数具有该泛型类型的一个参数,而getData()方法仅返回该泛型类型。(完整的源代码见下文。)现在让我困扰的是,在Java7中,代码编译得很好,而在Java8中,我得到以下错误:CompileMe.java:20:error:incompatibletyp

python - 高效的项目装箱算法(itertools/numpy)

我认为这是一个常见的组合问题,但我似乎找不到它的名称或任何相关资料。我在Python和numpy中这样做,但如果有一个快速的矩阵方法,我可能可以翻译。基本上,给定n个项目,我需要生成所有方法将它们放入m个箱子。例如,将4个项目分到3个箱中会得到类似[(4,0,0),(3,1,0),(3,0,1),(2,2,0),(2,1,1),...]。这是一种总量固定的产品。使用itertools实现这个很简单。importitertoolsdeffixed_total_product(bins,num_items):"""Returniteratorofallitembinningpossibil

python - Matplotlib - 已装箱数据的阶梯直方图

我正在尝试获取包含已分箱数据的直方图。我一直在尝试为此使用bar(),但我似乎无法弄清楚如何使其成为阶梯状直方图likethisonefromtheexamples,而不是填充直方图。 最佳答案 您可以通过偏移数据并改用plot来作弊:frommatplotlibimportpyplotimportnumpyasnp#sampledata:x=np.arange(30)y=np.cumsum(np.arange(30))#offsetthexforhorizontal,repeattheyforvertical:x=np.ravel