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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© newLife 中级黑马   /  2014-11-11 19:23  /  1197 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s1=new String("aaaa");这个在编译时期里“aaaa”会不会进入字符串常量池?在编译时期系统就会自动解析成这样?String s="aaaa";
String s1=new String(s);

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

3 个回复

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

那么在这个例子中池中是有这个对象呢还是没有?如果没有就会在池中创建创建该对象这句话,这个动作是在编译时期还是在运行时期?如果在运行该“aaaa”这个对象是怎么进入常量池的?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马