2014-11-14 91 views
0

我在混淆什么时候创建了String对象? 我的意思是在编译器识别过程中编译器识别java类中的每个语句绑定 或由jvm执行时,其中jvm根据绑定执行java类中的每个语句。什么时候创建了String对象?

+0

它在执行/运行时创建。在编译时,一切都转换为字节码并检查是否有编译错误。 – brso05 2014-11-14 13:11:04

回答

1

没有对象在编译时被实例化。无论类型如何,这都是不可能的。

编译java类将其转换为字节码,该字节码在JVM中执行,这是在堆中创建对象的位置。

+0

和字符串文字('“...”')作为UTF-8字节存储在.class文件的常量池中,并且类加载器将它们移动到共享位置(生成或接受字符串),所以“abc “在另一个类中==”abc“。 – 2014-11-14 13:26:47

+0

@StuPointerException ..观察下面的简单代码:if(boolean Exp1){String someStr =“FirstStrObj”+ someVar1;} else {String someStr =“FirstStrObj”+ someVar2;}然后怀疑是字符串对象“FirstStrObj”创建? – 2014-11-14 15:38:35

+0

@Ahmed Shareef - 简短的回答是一次。但是,编译器优化非常聪明,如果可以的话,它将合并字符串! – StuPointerException 2014-11-14 16:03:09

0

String s1 =“iByteCode”;

这是如何工作的?

■JVM首先检查字符串常量池,如果字符串不存在,它将创建一个新的String对象“iByteCode”,并在池中维护引用。变量's1'也指同一个对象。

■此语句创建一个String对象“iByteCode”。

相关问题