Tag: 自动装箱

Java整数自动自动装箱

我在Java(JDK 1.7)中偶然发现了这个: Integer a = 100; Integer b = 100; Integer c = 1000; Integer d = 1000; System.out.println(a == b); //true System.out.println(c == d); //false System.out.println(new Integer(100) == new Integer(100)); //false System.out.println(new Integer(1000) == new Integer(1000)); //false 输出为:true false false false 为什么== b评估为真? 这是什么原因? 这类似于String内化吗?

arraylist与数组中原始类型的包装

在“Core java 1”中我读过 注意:ArrayList的效率远低于int []数组,因为每个值都单独包装在对象中。 当程序员的便利性比效率更重要时,您只希望将此构造用于小型集合。 但是在我的软件中,由于一些要求,我已经使用了Arraylist而不是普通的arrays,尽管“该软件应该具有高性能,在我阅读引用的文本后,我开始恐慌!” 我可以改变的一件事是将双变量更改为Double以防止自动装箱,我不知道这是否值得,在下一个样本算法中 public void multiply(final double val) { final int rows = getSize1(); final int cols = getSize2(); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { this.get(i).set(j, this.get(i).get(j) * val); } } } 我的问题是改变double到Double会有所不同吗? 或者这是微观优化,不会影响任何事情? 请记住,我可能正在使用大型矩阵。我应该考虑重新设计整个程序吗?

为什么我的原始类型争论方法不会覆盖包装类型争论的超类方法?

public class WrapperClasses{ void overloadedMethod(Number N){ System.out.println(“Number Class Type”); } void overloadedMethod(Double D){ System.out.println(“Double Wrapper Class Type”); } void overloadedMethod(Long L){ System.out.println(“Long Wrapper Class Type”); } public static void main(String[] args){ int i = 21; WrapperClasses wr = new WrapperClasses(); //wr.overloadedMethod(i); } } class mine extends WrapperClasses{ void overloadedMethod(int N){ System.out.println(“Integer Class Type”); } public […]

为什么编译器/ JVM不能让autoboxing“正常工作”?

Autoboxing相当可怕。 虽然我完全理解了==和.equals之间的区别,但我不得不帮助让我跟上这个bug: final List foo = Arrays.asList(1, 1000); final List bar = Arrays.asList(1, 1000); System.out.println(foo.get(0) == bar.get(0)); System.out.println(foo.get(1) == bar.get(1)); 那打印 true false 他们为什么这样做? 它与缓存的整数有关,但如果是这样的话,为什么它们不只是缓存程序使用的所有整数? 或者为什么JVM总是自动取消对原始的框? 打印虚假或真假会更好。 编辑 我不同意旧代码的破坏。 通过让foo.get(0) == bar.get(0)返回true,你已经破坏了代码。 通过在字节代码中将int替换为int(只要从未赋值为null),就不能在编译器级别解决这个问题。

关于自动装箱和对象相等/身份的Java问题

public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here int a1 = 1000, a2 = 1000; System.out.println(a1==a2);//=>true Integer b1 = 1000, b2 = 1000; System.out.println(b1 == b2);//=>false Integer c1 = 100, c2 = 100; System.out.println(c1 == c2);//=>true } } […]

在为对象分配int时,Java是否会自动装箱?

这是自动装箱吗? Object ob = 8; 上面的代码首先将int literal 8包装在Integer中,然后将其引用分配给变量ob吗? 因为java语言规范在这种情况下没有任何内容。

原始数组类型上的Java Arrays.asList产生意外的List类型

可能重复: Arrays.asList()不能正常工作? 显然是Arrays.asList(new int[] { 1, 2, 3 });的返回类型Arrays.asList(new int[] { 1, 2, 3 }); 是List 。 这似乎完全打破了我。 这是否与Java有关,而不是原始类型的自动装箱arrays?