A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© jmf332376308 中级黑马   /  2016-7-20 00:14  /  424 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问String s = new String("hello");创建了几个对象。
答;两个。一个"hello"字符串对象,在方法区的常量池;一个s对象,在栈内存。

4 个回复

倒序浏览
cat73 黑马帝 2016-7-20 01:29:42
沙发
本帖最后由 cat73 于 2016-7-20 01:34 编辑

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

回复 使用道具 举报
cat73 黑马帝 2016-7-20 01:32:13
藤椅
可以看到 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
复制代码
回复 使用道具 举报
另一个是在堆内存吧!!!!
回复 使用道具 举报
是创建了两个对象的,一个在堆内存,一个在常量池
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马