黑马程序员技术交流社区

标题: 简单的小问题 [打印本页]

作者: jmf332376308    时间: 2016-7-20 00:14
标题: 简单的小问题
请问String s = new String("hello");创建了几个对象。
答;两个。一个"hello"字符串对象,在方法区的常量池;一个s对象,在栈内存。
作者: cat73    时间: 2016-7-20 01:29
本帖最后由 cat73 于 2016-7-20 01:34 编辑

正确答案是一个 String 对象,hello 根本不是在这句代码这里创建的。
以及 s 这个对象是在堆而不是栈中。
至于变量 s 的确是存储在栈里的,但存储的是引用而不是对象。


作者: cat73    时间: 2016-7-20 01:32
可以看到 hello 是通过 ldc 获取的,而不是在这里创建的。
  1.   public static void main(java.lang.String[]) throws java.lang.Throwable;
  2.     Code:
  3.        0: new           #2                  // class java/lang/String
  4.        3: dup
  5.        4: ldc           #3                  // String hello
  6.        6: invokespecial #4                  // Method java/lang/String."<init>":(Ljava/lang/String;)V
  7.        9: astore_1
  8.       10: return
复制代码

作者: lbx95272006    时间: 2016-7-20 08:38
另一个是在堆内存吧!!!!
作者: lbx95272006    时间: 2016-7-20 08:39
是创建了两个对象的,一个在堆内存,一个在常量池





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2