18得票5回答
为什么foo(1,2,3)没有被传递到可变参数方法foo(Object...)作为Integer[]?

请看下面的代码行: public static void main(String[] args) { foo(1,2,3); System.out.println("-------------------------------------"); foo(new...

17得票4回答
装箱基元和等价性

今天有人问了我这个问题。Integer a = 3; Integer b = 2; Integer c = 5; Integer d = a + b; System.out.println(c == d); 这个程序会打印出什么?它返回 true。我认为它总是会打印 false,因为我对 au...

17得票4回答
Java 8自动装箱+泛型:变量与方法的行为不同

我发现一段代码,在从Java 7切换到Java 8后无法编译。它没有使用任何新的Java 8功能,如lambda或streams。 我将问题代码缩小到以下情况: GenericData<Double> g = new GenericData<>(1d); Doubl...

16得票2回答
使用基本数据类型及其包装类的方法重载

我试图总结下面情景中所使用的规则。请解释为什么我会得到两个不同的输出。 情景1输出:我是一个对象。 class Test { public static void main (String[] args) { Test t = new Test(); ...

16得票1回答
为什么Scala中的原始类型(如Int)会被擦除为Object?

在Scala中,{ x: Option[Int] => x } .getClass .getMethod("apply", classOf[Option[_]]) .getGenericParameterTypes 返回 Array(scala.Option<ja...

16得票1回答
Java中null转int的条件运算符问题

可能是重复问题: Java中的棘手三元运算符 - 自动装箱 我们知道编译器不允许使用int roomCode = null;这样的代码。 那么为什么在代码1中,编译器没有报错,而在代码2中却报错了呢? 代码1:int roomCode = (childCount == 0...

16得票1回答
Java SE 11 - Java语言规范中类型转换的新案例

Java SE 11的JLS §5.2包含一些新的类型转换情况,而Java 8的JLS没有,参见列表中的第4项和第5项: 赋值上下文允许使用以下之一: 恒等转换 扩宽原始类型转换 扩宽引用类型转换 扩宽引用类型转换后跟拆箱转换 扩宽引用类型转换后跟拆箱转换,然后再跟扩宽原始类型转换 装箱...

15得票1回答
为什么在自动装箱时,final long转换为Byte会出现编译错误,而final int转换为Byte却没有问题?

将 int 和 short 类型的常量自动装箱为 Byte 时不会出现错误,但当常量类型为 long 时会出现错误。为什么?final int i = 3; Byte b = i; // no error final short s = 3; Byte b = s; // no error ...

15得票1回答
在Java 7中比较对象和整数

最近我遇到了一个问题,让我停下来思考... 对我来说,下面的代码应该总是会触发错误,但当我的一位同事问我为什么Eclipse没有显示错误时,我无法回答任何问题。 class A { public static void main(String... args) { ...

15得票3回答
Java三元运算符中的自动装箱行为导致空指针异常

我前几天遇到了一个非常奇怪的NullPointerException,它是由三元运算符中意外的类型转换引起的。给定这个(无用的示例)函数:Integer getNumber() { return null; } 我原以为以下两个代码段在编译后会完全相同:Integer number; ...