在版本1.5
中,Java引入了自动装箱
的概念。
public interface SomeInterface {
public void test(Integer val);
}
public class Main implements SomeInterface {
/*The method signature gets different and compiler is asking to override
un-implemented methods*/
public void test(int t) {
}
}
那么为什么我在覆盖未实现的方法时出现编译时错误,为什么上面的测试方法的参数没有自动装箱
以匹配父测试方法签名?
自动装箱和解装箱可以发生在任何需要对象和原始类型可用的地方,例如在需要对象参数的方法调用中,如果传递原始,Java自动将原始转换为等值。
阅读更多:http://javarevisited.blogspot.com/2012/07/auto-boxing-and-unboxing-in-java-be.html#ixzz36Rhg91CB.
这里的类Main实现了接口SomeInterface,这是方法的实现,而不是自动装箱工作的方法的调用。
因为整数不等于 int
整数
是类int
是基元类型所以这两个方法都有不同的参数类型,这就是为什么您不覆盖该方法,而是在类中创建新的方法。
您可以调用具有自动装箱功能的方法,但您不能ovveride。
最重要的
子类中具有相同签名(名称,加上参数的数量和类型)和返回类型的实例方法....< br >
当原始值为以下值时,Java编译器会应用自动装箱:
这是因为子类中的方法与超类中的方法不具有覆盖等效性。超类方法可以将null
作为参数,而子类方法不能(这里没有关于自动装箱的内容)。
问题内容: 我想将原语转换为字符串,然后尝试: 失败并显示以下错误: 现在,我知道原语不是引用类型(即不是对象),因此不能有方法。但是,Java 5引入了自动装箱和拆箱功能(一种C#…我在C#中从未喜欢过,但这不重要)。因此,通过自动装箱,我希望上面将myInt转换为Integer,然后在其上调用toString()。 此外,我相信C#允许这样的调用,除非我记错了。这仅仅是Java的自动装箱/拆箱
请注意,对于某些数字,引用比较将产生正确的结果,因为Integer类维护了到之间的值的内部缓存(另请参阅TheLostMind的注释)。这就是为什么我在示例中使用的原因,也是为什么我特别询问取消装箱/装箱而不是比较结果的原因。
本文向大家介绍自动装箱和拆箱?相关面试题,主要包含被问及自动装箱和拆箱?时的应答技巧和注意事项,需要的朋友参考一下 自动装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。 比如:把int转化成 Integer,double转化成 Double,等等。反之就是自动拆箱。 原始类型: boolean,char,byte,short,int,long,float,double
有以下代码: 它打印: 12 这个不能编译。为什么?
问题内容: 以下代码进行编译(使用Java 8): 但是它是做什么的呢? 取消装箱: 或盒子: 那么它是比较两个对象(按引用)还是按值比较两个变量? 请注意,对于某些数字,引用比较将产生正确的结果,因为Integer类会维护一个介于to 之间的值的内部缓存(另请参见TheLostMind的注释)。这就是我在示例中使用的原因,也是为什么我特别询问拆箱/装箱而不是比较结果的原因。 问题答案: 它在JL
问题内容: 为什么第二段代码更快? 问题答案: 自动装箱使用,内部将Integer对象缓存为小整数(默认情况下为-128至127,但是最大值可以使用“ java.lang.Integer.IntegerCache.high”属性进行配置-请参见Integer.valueOf的源代码) ,因此与直接调用不同。因为在调用之前可以快速检查整数值的大小,所以直接调用要快一些(尽管如果您有很多小整数,它会使