Tag: autoboxing

在Java中,如果返回类型分别是基元及其包装类,是否可以重写方法?

在使用Java中重写和重写方法的想法时,我注意到这些方法的返回类型有一些灵活性。 这里有一点理论:“派生类中重写方法的返回类型可以是相同的,或者是基类中重写方法的返回类型的子类。这种重写方法的返回类型是已知的作为协变回归类型。“ 下面的例子假设B扩展A. Method in A: public Object some_method() {….} Method in B: public Integer some_method() {….} 因此,我们看到B中的some_method()会覆盖A中的some_method(),因为Integer是Object的子类。 我想知道是否存在以下灵活性以及以下是否因为自动装箱和拆箱而正确工作: Method in A: public Integer some_method() {….} Method in B: public int some_method() {….} 要么 Method in A: public int some_method() {….} Method in B: public Integer some_method() {….}

拆箱问题

我有一个扩展LinkedList类的类。 这是代码的摘录: class SortedList extends LinkedList { int intMethod(Integer integerObject){ return integerObject; } } 这应该返回自动取消装箱的int值。 但由于某种原因,编译器抛出一个错误,指出类型不兼容,并且所需类型为int,找到的类型为Integer。 这在另一个class级完美无缺! 是什么赋予了? 🙁

允许“布尔”和“对象”的等式比较?

以下代码 public class TestComparison { public static void main(String[] args) throws Exception { boolean b = true; Object o = new Boolean(true); System.out.println(“comparison result: “+ (o == b)); // Eclipse complains about this expression } } 使用javac V1.7.0_15编译时没有错误,并在运行时打印“false”。 但是,Eclipse Juno抱怨“不兼容的操作数类型对象和布尔值”。 显然javac自动装箱原始布尔b ,然后通过对象相等比较o和autoboxed b ,产生false ,而Eclipse拒绝进行自动装箱。 根据Java语言规范,哪种是正确的行为? 我应该在哪里提交错误? 注意:如果我将o的类型更改为Boolean ,则按预期工作:Eclipse接受代码,代码打印为“true”。 ideone.com上的Runnable版本

自动装箱和拆箱在Java和C#中表现不同

我手动将代码从Java(1.6)转换为C#,并发现原语(int和double)的行为有些困难。 在C#中,似乎几乎所有转换都是自动发生的 List list1 = new List(); // legal, C# double d0 = 3.0; list1.Add(d0); // legal, C# Double dd = 2.3f; // legal, C# list1.Add(dd); // legal, C# List list2 = new List(); // legal, C# double d1 = 3.0; list2.Add(d1); // legal, C# list2.Add(2.0); // legal, C# double d2 = list2.get(0); // legal, […]

x的表达式被装入X?

我有点担心我的Eclipse IDE当前正在写入自动编码或自动装箱类型的每个表达式旁边的警告: The expression of type x is boxed into X The expression of type X is unboxed into x 这是一个我应该做出反应的警告吗? 我认为autoboxing是一种Java语言function – 但现在每次使用此function时我似乎都会收到警告。

覆盖和返回类型兼容性

以下编译没有任何问题 boolean flag = true; Boolean flagObj = flag; 现在对以下场景进行成像 interface ITest{ Boolean getStatus(); } class TestImpl implements ITest{ public boolean getStatus(){ // Compile error: return type is incompatible return true; } } 我的问题是关于上述行的编译错误。 My Interface提到返回类型为Boolean但实现的方法返回boolean ( 文字 ) 我的问题是,如果Boolean和boolean是兼容的,那么编译器为什么抱怨? 自动装箱不适用于此吗?

为什么整数的自动装箱和拆箱不能与Java中的Arrays.asList一起使用?

以下是抛出compile error : int[] arrs = {1,2,4,3,5,6}; List arry = Arrays.asList(arrs); 但这有效: for (Integer i : arrs){ //do something } 自动装箱在很多情况下工作,我刚才给出了一个for-loop例子。 但它在我在Arrays.asList()中Arrays.asList()的List-view中失败。 为什么这会失败?为什么选择设计实现?

java:boolean instanceOf Boolean?

我有点困惑:我有一个函数,它以Object作为参数。 但是,如果我只传递一个原语甚至将布尔基元识别为布尔对象,编译器就不会抱怨。 为什么? public String test(Object value) { if (! (value instanceof Boolean) ) return “invalid”; if (((Boolean) value).booleanValue() == true ) return “yes”; if (((Boolean) value).booleanValue() == false ) return “no”; return “dunno”; } String result = test(true); // will result in “yes”

为什么java没有autobox int 到Integer

当我做以下, arrayList1 – 包含一个元素,它是一个int[] 。 arrayList2 – 未编译(错误:构造函数ArrayList(List)未定义) arrayList3 – 包含7个元素,它们是Integer对象 这是代码: int[] intArray = new int[]{2,3,4,5,6,7,8}; ArrayList arrayList1 = new ArrayList(Arrays.asList(intArray)); ArrayList arrayList2 = new ArrayList(Arrays.asList(intArray)); Integer[] integerArray = new Integer[]{2,3,4,5,6,7,8}; ArrayList arrayList3 = new ArrayList(Arrays.asList(integerArray)); 问题:为什么编译器不会自动将int[]中的元素添加到Integer并创建ArrayList ? 这背后的原因是什么? 这是我的愚蠢还是其他原因?

哪个更好:让Java进行自动装箱或使用valueOf()

我只是想知道让java autobox说一个整数有什么区别: Integer myInteger = 3; // This will call Integer.valueOf() 或者你的代码是 Integer myInteger = Integer.valueOf(3); 这有什么微优化吗? 我知道第二个更明确,但它也更不必要打字,除了这个有什么区别吗?