String和常量池

1.Java 会确保一个字符串常量只有一个拷贝

 2.用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间

3.编译器可以在编译期间确定的,如常量或者final修饰的,则在编译器优化确定

String s1="abc";

String s2="abc";

String s3="a"+"bc"  //注意,编译器会优化成:String s3="abc";

String s4=new String("abc");

String s5 = String.valueOf(s4);

String s6 = new String(str4);

简言之,valueOf和“”这种直接的,采用缓冲池里面的值

但是,String s5 = String.valueOf(s4);    // valueOf 的底层,如果传进来是一个String对象,直接返回这个String的地址   所以相当于  String s5 = s4

注意,new String()肯定会创建新的对象 ,但是由于String的构造方法String(String str),新创建的String的value,hash会指向传入的对象的对应属性

 

 

 

 

 

二.String的常见注意事项:

  1.replace与replaceAll。  都是替换全部的,一个是完全匹配,一个是基于正则表达式的。

 

转载于:https://www.cnblogs.com/heyboom/p/9112948.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值