Tag: autoboxing

Java:为什么不在这里发生自动装箱?

这给了我一个错误: int[] l = new int[] {0, 2, 192, -1, 3, 9, 2, 2}; int[] l2 = new int[] {9001, 7, 21, 4, -3, 11, 10, 10}; int[] l3 = new int[] {5, 5, 5, 64, 21, 12, 13, 200}; Set<List> lists = new HashSet<List>(); lists.add(Arrays.asList(l)); Eclipse:类型Set<List>的方法add(List)不适用于参数( List ) 我以为int应该被自动提交给Integer ?

为什么不为generics自动封装Java原始类型?

Java不允许在通用数据结构中使用原始类型。 例如,不允许使用ArrayList 。 原因是,原始类型不能直接转换为Object。 但是Java 1.5确实支持自动装箱,而包装类在通用数据结构中工作。 那么为什么编译器无法将其自动封装到ArrayList ? 为什么这不起作用还有其他原因吗?

为什么自动装箱被标记为警告?

我知道自动取消装箱应该小心,因为未装箱的参考可以为空。 为什么自动装箱也被标记为警告? 我在这里遗失了一些陷阱吗?

整数值比较

我是一个新手Java编码器,我只是读取一个整数类的变量,可以在API中描述三种不同的方式。 我有以下代码: if (count.compareTo(0)) { System.out.println(out_table); count++; } 这是在循环内部,只输出out_table 。 我的目标是弄清楚如何查看整数count > 0的值。 我意识到count.compare(0)是正确的方法吗? 还是count.equals(0) ? 我知道count == 0是不正确的。 这是正确的吗? 是否存在值count=0的值比较运算符?

比较Java中的双精度会产生奇怪的结果

我真的无法理解为什么会发生以下情况: Double d = 0.0; System.out.println(d == 0); // is true System.out.println(d.equals(0)); // is false ?! 然而,这可以按预期工作: Double d = 0.0; System.out.println(d == 0.0); // true System.out.println(d.equals(0.0)); // true 我很肯定这在某种程度上与自动装箱有关,但我真的不知道为什么在使用==运算符和调用.equals时为什么0会被加框 。 这不是暗示违反了equals合同吗? *它是自反的:对于任何非空参考值 * x,x.equals(x)应该返回 *是的。 编辑 : 谢谢你的快速答案。 我认为它的盒装方式不同,真正的问题是:它为什么装箱不同? 我的意思是,如果d == 0d比d.equals(0d)更直观和预期,这将更直观,但是如果d == 0看起来像一个Integer是true比’直觉’ d.equals(0)也应该是真的。

java:自动装箱和铸造?

我对一个小问题感到困惑,请参阅以下内容: Double j = new Double(5); // No problem. double j =5;// //But //Here the problem: Double j = 5; Long k =5; Float g = 5.0; 我知道解决方案,但我想理解为什么在某些情况下,演员是隐式完成而在其他情况下不是。

使用’cast’方法将Integer转换为int时的Autoboxing / Unboxing

这是一个非常简单的情况:我试图将Object类型转换为这样的原语: Object object = Integer.valueOf(1234); int result1 = int.class.cast(object); //throws ClassCastException: Cannot convert java.lang.integer to int int result2 = (int)object; //works fine 这是类’Class’的cast方法的源代码 public T cast(Object obj) { if (obj != null && !isInstance(obj)) throw new ClassCastException(cannotCastMsg(obj)); return (T) obj; } private String cannotCastMsg(Object obj) { return “Cannot cast ” + obj.getClass().getName() + ” to […]

自动装箱和原始类型以匹配方法签名

在1.5版本中,Java引入了auto-boxing的概念。 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) { } } 那么为什么我为了覆盖未实现的方法而得到编译时错误,为什么上面的测试方法的参数不是auto-boxed以匹配父测试方法签名?

为什么Integer和int可以互换使用?

我很困惑为什么Integer和int可以在Java中互换使用,即使一个是原始类型而另一个是对象? 例如: Integer b = 42; int a = b; 要么 int d = 12; Integer c = d;

Object.intValue()的奇怪行为

我正在努力解决一个问题,我无法理解为什么它不起作用。 如何通过double obj传递变量并转换为int ? 为什么它不能在顶部代码片段中工作,但它在行下方的底部代码片段中有效? 唯一的区别似乎是添加了一个额外的变量,它也被输入为double ? //Converting double to int using helper //This doesn’t work- gets error message //Cannot invoke intValue() on the primitive type double double doublehelpermethod = 123.65; double doubleObj = new Double( doublehelpermethod); System.out.println(“The double value is: “+ doublehelpermethod.intValue()); //————————————————————————– //but this works! Why? Double d = new Double(123.65); System.out.println(“The double […]