Tag: autoboxing

为什么在Scala的标准库中专门有这么几件事?

我已经在Scala 2.8.1的标准库的源代码中search了@specialized的用法。 它看起来只有less数的特征和类使用这个注释: Function0 , Function1 , Function2 , Tuple1 , Tuple2 , Product1 , Product2 , AbstractFunction0 , AbstractFunction1 , AbstractFunction2 。 没有任何集合类是@specialized 。 为什么不? 这会产生太多类吗? 这意味着使用具有原始types的集合类是非常低效的,因为会有大量不必要的装箱和拆箱操作。 什么是最有效的方法来有一个不变的列表或序列(与IndexedSeq特性)的Int ,避免装箱和拆箱?

Java中的string和整数的空值

public class Test { public static void main(String[] args) { String s = null; String s1 = null; Integer i = null; Integer i1 = null; System.out.println(s+i); System.out.println(i+s); System.out.println(s+s1); try { System.out.println(i+i1); } catch (NullPointerException np) { System.out.print("NullPointerException"); } } } 问题很简单 – 为什么只在最后一行收到NullPointerException ?

比较非基元Long值127和128

我想使用if条件来比较两个Long对象的值。 当这些值小于128时 , if条件正常工作,但是当它们大于或等于128时 ,比较失败。 例: Long num1 = 127; Long num2 = 127; if (num1 == num2) { // Works ok } 上面的代码比较正常工作,但在下面的代码失败: Long num1 = 128; Long num2 = 128; if (num1 == num2) { // Does NOT work } 为什么比较长variables与大于127的值有问题? 如果variables数据types改变为长基元 ,那么比较适用于所有情况。

为什么int num = Integer.getInteger(“123”)抛出NullPointerException?

以下代码引发NullPointerException : int num = Integer.getInteger("123"); 我的编译器调用getInteger为null,因为它是静态的吗? 这没有任何意义! 发生了什么?

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

我绊倒了一个非常奇怪的NullPointerException这是由三元运算符中意外的types转换造成的。 鉴于这个(无用的示例)function: Integer getNumber() { return null; } 我期待编译后的以下两段代码段完全相同: Integer number; if (condition) { number = getNumber(); } else { number = 0; } 与 Integer number = (condition) ? getNumber() : 0; 。 事实certificate,如果condition为true ,那么if语句工作正常,而第二个代码段中的三元操作会抛出一个NullPointerExceptionexception。 看起来好像三元操作已经决定在将结果自动装箱回到Integer之前,将这两个选项都input到int ! 事实上,如果我明确地将0为Integer ,exception就会消失。 换一种说法: Integer number = (condition) ? getNumber() : 0; 不一样: Integer number = (condition) ? […]