String创建问题?

参考博文:https://blog.csdn.net/qq_34490018/article/details/82110578
1.String类是使用了final修饰,内置char[] 也是使用了fianl修饰,当你改变String的时候,通常会重新new一个对象,String实例的值是通过字符数组实现字符串存储的。

2.什么时候创建呢,一般都是先查找字符串常量池有没有该对象,有的话直接将常量池对象的内存地址引用过来(也就是没有新建对象),没有则创建新的地址,并存到常量池里.

举例子:

  • +拼接字符串 编译期就已经拼接了
    String a=“a”+“b”+“c”+“d” ;创建了几个对象? //0个或者1个对象
    右边是"+“号拼接,而且都是常量不是对象引用,编译时相当于拼接了"abcd”,
    接着才去运行时常量池查找对象地址是否存在,有的话直接引用地址,没有就创建一个.
    等价: String a=new StringBuilder(“abcd”);
    //常量池查找"abcd"

  • new对象
    String b=new String(“abcd”);
    这里 可以拆分两步,等价于 String a=“abcd”; String b=new String(a);
    那么,常量池没有"abcd" 就会创建一个, 之后new一个,一共2个对象;

public class Test {
    public static void main(String[] args) {
       String a="a"+"b"+"c"+"d";
       String b=new String(a);
       String c="abcd";
        System.out.println(a==b);	//false
        System.out.println(a==c);  //true

    }
}
  • 混合使用,假设常量池不存在 13,1,14,1314
    String a=”1”+”3”+new String(“1”)+”4”;
    相当于 String n1=“13”,String n2=“4”; //创建2个对象,13和4
    String a=n1+new String(“1”)+n2; //new创建了2个, 里面的对象是个String
    String a=“1314” ; //1314拼接后又创建1个
    一共是4个对象
  • new+new
    String a=new String(“1”)+new String(“1”);
    相当于, 创建了对象 String n=“1”; //创建一个"1"
    String a=new String(n)+new String(n); //new了两个对象
    //最后拼接了 “11” 创建一个
    //一共四个对象
    ps:JDK6中的常量池是放在永久代的,永久代和Java堆是两个完全分开的区域
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值