StackOfStrings s;
s = new StackOfStrings(100);
和这个
StackOfStrings s = new StackOfStrings(100);
答案 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()
}