我有一个关于在Java中推广原始类型的问题.正如我们在下面的示例中所看到的,由于类型不匹配的错误,其中一个方法无法编译.每个方法返回相同的值但是使用不同的类型.
long当包装类的版本Long失败时,原始方法的版本可以正常工作.这是因为语句中的int文字return将首先提升为更宽的基本类型(例如long),然后提升到相应的包装类Integer等等.由于Integer不是Long编译器的子类会产生错误.
但是为什么包装类的版本Byte没有任何错误?编译器究竟做了什么?
long getPrimitiveLong() {
return 12; // valid
}
Long getWrapperLong() {
return 12; // Error: type mismatch
}
Byte getWrapperByte() {
return 12; // valid
}
Run Code Online (Sandbox Code Playgroud)