通过这两种方式在Java中创建对象有什么区别?

时间:2016-02-02 12:23:54

标签: java

StackOfStrings s;
s = new StackOfStrings(100);

和这个

StackOfStrings s = new StackOfStrings(100);

3 个答案:

答案 0 :(得分:12)

简短回答

没有

更长的答案

为第一个[1]生成的 st 字节码:

class Test {
  Test();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: new           #2                  // class Test
       3: dup
       4: invokespecial #3                  // Method "<init>":()V
       7: astore_1
       8: return
}

2 nd one:见[1]。

答案 1 :(得分:0)

创建的方式没有区别。唯一不同的是,在第一个示例中,您首先声明变量 s 属于StackOfStrings类型。这意味着您尚未确定要创建的实际对象类型(可能是StackOfStrings的子类型)请尝试阅读:https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

答案 2 :(得分:0)

没有,当你这样做StackOfStrings s;时,你不是在创建一个对象,而只是一个引用。当您执行此操作s = new StackOfStrings(100);时,您将链接参考内存与您创建的新对象。所以,当你StackOfStrings s = new StackOfStrings(100);时,你正在同时做这两件事。 那么,为什么不做第二种方式呢?当您不知道您是否收到某个对象或创建一个新对象时。例如:

Object o;
if (condition) {
  o = getSomeObject();
} else {
  o = new Object()
}