第一个对象是字符串常量"xyz"。应该放在数据区吧?
第二个对象是new String("xyz")的时候产生的,在heap中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz"。 具体是怎么指向的?堆里面那个对象的内容是字符串常量在数据区的地址么?
另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存。临时变量分配在栈空间。
String s = new String("xyz");创建了几个String Object?
答案:1 悬赏:0
解决时间 2021-02-18 09:58
- 提问者网友:无悔疯狂
- 2021-02-17 20:16
最佳答案
- 二级知识专家网友:抱不住太阳的深海
- 2021-02-17 21:29
一个或两个
String类型在Java里比较特殊 是作为常量存放在内存区的 如果在第一次使用时该字符串在内存的字符串常量池中不存在 就会创建放进去,如果存在就使用。
楼主给出的这行代码中,使用new肯定是要创建一个新的字符串的,而在这之前就需要先判断在字符串常量池中是否已经存在了一个"xyz",如果不存在,就会先创建一个"xyz"放进常量池,然后再new一个String s,这样就是两个。如果在new之前常量池中已经存在了"xyz",那就只需要new一个String s,这样就是一个了。
String类型在Java里比较特殊 是作为常量存放在内存区的 如果在第一次使用时该字符串在内存的字符串常量池中不存在 就会创建放进去,如果存在就使用。
楼主给出的这行代码中,使用new肯定是要创建一个新的字符串的,而在这之前就需要先判断在字符串常量池中是否已经存在了一个"xyz",如果不存在,就会先创建一个"xyz"放进常量池,然后再new一个String s,这样就是两个。如果在new之前常量池中已经存在了"xyz",那就只需要new一个String s,这样就是一个了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯