java - Java 中的 (Integer)y 和 new Integer(y) 有什么区别?

标签 java autoboxing unboxing

以下有什么区别:

Integer in = (Integer)y;

Integer in = new Integer(y);

我想将 int 类型转换为 Integer 类型,反之亦然。这是我的代码:

public class CompareToDemo {

  public static void main(String[] args) {
    // Integer x=5;
    int y=25;

    System.out.println(y+" this is  int variable");

    Integer in = (Integer)y;

    //Integer in = new Integer(y);

    if(in instanceof Integer){
      System.out.println(in +" this is Integer variable");
    }
  }
}

最佳答案

如果您只想将 int 原语转换为 Integer 对象, 你有四个选择

   Integer in = (Integer)y;         // 1 explicit cast
   Integer in = y;                  // 2 implicit cast (autoboxing)
   Integer in = new Integer(y);     // 3 explicit constructor
   Integer in = Integer.valueOf(y); // 4 static factory method

这里最可取的方式是 2(自动装箱)。显式构造函数 (3) 不太可取,因为它可能会对性能造成一些小的影响。

此外,它们并不严格等价。考虑:

public static void main(String[] args) {
    int x = 25;
    Integer a = new Integer(x);
    Integer b = new Integer(x);
    System.out.println(a == b);     // false
    Integer c = Integer.valueOf(x);
    Integer d = Integer.valueOf(x);
    System.out.println(c == d);     // true
    Integer e = (Integer)x;
    Integer f = (Integer)x;
    System.out.println(e == f);     // true
}

这是因为缓存了小整数 (details here)。

关于java - Java 中的 (Integer)y 和 new Integer(y) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177732/

相关文章:

C# 通过对象拆箱

c# - "as"和可空类型的性能惊喜

java - 在哪里可以找到 Java 7 的 jnlp.jar

java : create nested json object from String

java - 对 doInBackground 的不同返回类型使用泛型的异步任务

java - 刚刚偶然发现了 java.util.Tripwire。它从 1.8 开始就出现在 Java 中。 Github 上的零使用。这可以用来做什么?

.net - 装箱和拆箱是否有相同的性能影响?

java - 通用类型和 Instanceof

Java使用Integer.parseInt进行比较

通过方法进行 Java 自动装箱