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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先来个列子,String s1 = "a" + new String("bc");
我们知道串 "a" 是会在String pool 中开辟一块存储区来存,并提供它的首地址,
而 new String("bc") 则先在String pool中开辟存储空间来存储"bc" 在堆内存中new 一块内存并拷贝"bc" 放在该内存中。
问题:那么请问 此时 "a" + new String("bc") 这个运算的详细过程是什么呢? 且s1 里面存储的又是什么呢?
第二个例子
String s1 = ”abc“ ;
String s2 = ""+"abc" 和 String s3 = "" + s1 有什么不同呢? 同样s3里面存储的是什么呢?

3 个回复

倒序浏览
这个问题!同求解释!
回复 使用道具 举报
  1.                 String s0 = "a" + new String("bc");
  2.                 String s1 = "abc";
  3.                 String s2 = "" + "abc";
  4.                 String s3 = "" + s1;
复制代码
以上代码在运行期按照以下代码执行
  1.         String s0 = new StringBuilder("a").append(new String("bc")).toString();
  2.         String s1 = "abc";
  3.         String s2 = "abc";
  4.         String s3 = new StringBuilder().append(s1).toString();
复制代码
回复 使用道具 举报
public static void main(String[] args) {
                String str1 = "a";
                String str2 = "b";
                String str3 = "ab";
                String str4 = "a" + "b";//在编译时就直接在字符串池中找到"ab",str4指向字符串池
                String str5 = str1 + str2;//先在堆中创建两个String对象,分别为"a","b",再利用StringBuild的append(),创建"ab",把"ab"的堆地址赋给str5
                String str6 = str1 + "b";//还是在堆中分配
                System.out.println(str3 == str4);
                System.out.println(str3 == str5);
                System.out.println(str3 == str6);
        }
result:
true
false
false
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马