如果一个新对象在这里实例化(如果obj ==“”)

时间:2010-10-27 14:52:42

标签: java

我想知道是否在这里创建了一个新对象:

String obj;
if(obj == "") {
}

在这里:

if(obj.equals("")){}

我的意思是像新String(“”)这样的对象实例化这两种情况吗?

5 个答案:

答案 0 :(得分:6)

种类

你是对的,程序实际上会引用一个包含值String的完整""对象。但是,这并不是在调用方法时严格创建的。当类加载到VM中时,字符串(编译时常量)字符串文字在JVM范围的常量池中创建,并且相同的常量共享相同的字符串。

由于JVM本身几乎肯定有一个类引用空字符串文字,因此字符串池已经包含与""对应的对象,因此您的类实际上不会导致创建新对象

答案 1 :(得分:1)

不,obj只是在这些情况下无处引用。您将收到一条错误消息,指出obj在任何一种情况下均未初始化。

答案 2 :(得分:1)

这取决于。如果字符串池已包含字符串“”,则不会构造任何新对象。否则,当然会构造一个新的String对象并将其放入字符串池。

答案 3 :(得分:1)

没有。将不会为obj创建任何对象。您是否正在混淆C ++,其中默认构造函数将被调用?

String obj;
if(obj == "") {
}

支票obj == ""将失败(因为obj将等于null""则不会。)

if(obj.equals("")){}

您将获得NullPointerException,因为objnull,无法发送。


如果问题是是否为了比较而创建了一个空字符串,答案是:不是在运行时,而是在编译时。将其与问题“i == 5在此处创建值为5的整数?”进行比较好吧,不是真的。

答案 4 :(得分:1)

该代码甚至没有构建。编译器告诉你原因:

"The local variable obj may not have been initialized"
相关问题