黑马程序员技术交流社区

标题: 字符串常量池的问题 [打印本页]

作者: newLife    时间: 2014-11-11 19:23
标题: 字符串常量池的问题
String s1=new String("aaaa");这个在编译时期里“aaaa”会不会进入字符串常量池?在编译时期系统就会自动解析成这样?String s="aaaa";
String s1=new String(s);

如果是这样的话,那么“aaaa”这个常量会进入常量池,如果不是这个步骤,那么传入的“aaaa”也是新建立的对象?那么具体是哪样求解!

作者: win_top1    时间: 2014-11-12 23:54
创建了两个字符串对象,首先会在字符串池中寻找是否存在一个“xyz”的字符串对象,如果没有,那么这时就会在池中创建一个该对象,如果池中有那么就不需要创建,然后在堆中在创建一个"xyz"的对象,最后返回堆中的这个对象的地址并赋给s这个引用即可;
如果用字面值的方式创建字符串对象的时候,即String s="abc"; 那么此时有可能没有创建对象,而是返回字符串池中已有的这个"abc"这个对象的地址并赋值给s,当然若果池中没有这个对象,那么这时就会在池中创建这个对象,最后返回这个对象的地址即可
楼主要知道创建字符串对象的两种方式和字符串池的概念
作者: win_top1    时间: 2014-11-12 23:58
对于String s1=new String("aaaa");创建了两个字符串对象,首先会在字符串池中寻找是否存在一个“aaaa”的字符串对象,如果没有,那么这时就会在池中创建一个该对象,如果池中有那么就不需要创建,然后在堆中在创建一个"aaaa"的对象,最后返回堆中的这个对象的地址并赋给s这个引用即可;
如果用字面值的方式创建字符串对象的时候,即String s="abc"; 那么此时有可能没有创建对象,而是返回字符串池中已有的这个"abc"这个对象的地址并赋值给s,当然若果池中没有这个对象,那么这时就会在池中创建这个对象,最后返回这个对象的地址即可
楼主要知道创建字符串对象的两种方式和字符串池的概念
作者: newLife    时间: 2014-11-13 12:15
win_top1 发表于 2014-11-12 23:58
对于String s1=new String("aaaa");创建了两个字符串对象,首先会在字符串池中寻找是否存在一个“aaaa”的 ...

那么在这个例子中池中是有这个对象呢还是没有?如果没有就会在池中创建创建该对象这句话,这个动作是在编译时期还是在运行时期?如果在运行该“aaaa”这个对象是怎么进入常量池的?




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