Java成神之路(五)String类

String 类

  1. 字符串String的不可变性:
    一旦创建,便具有不可变性,对象的引用与对象的区别,对象是内存的内存块,对象的引用是4字节的数据,存放指向对象的地址,String 的操作,会生成新的对象,改变了引用,没有改变对象本身。其实用反射可以改变其value
  2. String,不可改变的原因与好处
    效率与安全,这也是不可改变对象的最重要作用:线程安全,拷贝对象复制地址即可。亦是字符串常量池的需要
    String类的不可改变好处:节省字符串池的空间,多线程安全,
  3. Jdk1.6和Jdk1.7对Substring 的区别
    Substring(int beginIndex,int endIndex)方法用于分割字符串,返回一定范围内的字符串。字符串实际为一个字符串数组,
    1.6中包含三个属性域:value(实际字符数组)、offset(第一索引)、count(个数)调用substring时,value指向不变,改变的是其他两个的值,使用私有构造,共享value提升速度,导致内存占有率大。即this.value=value,解决办法:str=str.substring(beginIndex,endindex)+“”,生成新的完全对象,改变其value。
    1.7中,使用公有构造 ,使用this.value = Arrays.copyOfRange(value, offset, offset+count);返回新的对象,解决内存泄漏问题。但是效率慢了。
  4. replaceFirst、replaceAll、replace的区别
    replaceFirst 遇到的替换第一个字符,运用正则,replaceAll,替换所有,运用正则,replace 全替换,没有正则。由于String的不可变,替换后生成的新的字符串,原来的字符串对象是不变的。
  5. String 对+的重载
    Java不支持对运算符重载,唯一的重载便是+。使用+时。调用了StringBuilder以及它的appen()和tostring()方法;
  6. 字符串拼接的五种方式
    String.Concat()、String.join(),String.Format()、+、StringBuilder.apend()。StringBuilder性能最优,是其他后两种的基础,Join用于拼接字符串数组或者集合,Concat()、+更适合与小数据,format 常用语日期格式。
  7. String.valueOf()和Integer.toString()
    Integer.toString()返回指定的整数有符号位的String对象,十进制字符串,需判断空值。String.valueof()有大量的重载,会允许空值,本质调用了Integer.toString()。
  8. Switch 对String进行了支持。
    本质是先通过hashcode来比较,如果一样,再通过equals()比较。
    如果哈希值相同,使用else if判断。
  9. 字符串池,常量池(运行时常量池、Class常量池)
    String str =”abc”效率比String str =new String(“abc”)好,就是因为前者去先去字符串池寻找是否存在“abc”这个字符串,如果存在,将该字符串对象的首地址赋值为str,没有则创建。
    Class常量池,即静态常量池,包含字面量(final常量池,浮点数是不入常量池的)、符号引用量(类和接口的全限定名,字段和方法名称和描述符)。
    运行时常量,保存在方法区,方法区线程共享,所以常量池共享。在运行期间也可能将新的常量放入池中, 如Intern(),实现对象的动态共享,节省内存,节省时间。
  10. String.Intern()
    把字符串对象放入常量池中,共享对象,线程共享。New的对象都放在堆中,引用才放入栈中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值