java字符串切割成数组 string切割成数组

35白皮书 2023-01-08

Object

String对象是java中一个重要的数据类型我们在大多数情况下都会用到。其实在Java语言中它的设计者也对String做了大量的优化工作这也是String对象的特点即不变性、常量池优化和String类的最终定义。1.1不可变字符串对象的状态在创建后不会改变。为什么这也是java设计师做的优化?在Java模式中有一种模式叫做不可变模式。懂行的孩子应该也知道不可变模式的作用:当一个对象被多个线程共享并且频繁访问时可以省略同步和锁定时间从而提高性能。字符串的不变性可以推广为不变模式。1.2常量池优化常量池优化是什么意思?也就是说当两个字符串对象具有相同的值时它们都只是引用常量池中的同一个副本。因此当程序中频繁出现一个字符串时这种优化技术可以节省大量内存空。例如:

在上面的代码中s1和s2指的是同一个地址所以第四行的打印结果为真;虽然s3只等于S1和S2但是s3通过新字符串(“123”)内存空重新打开。因为引用的地址不同第五行打印出falseintern方法返回常量bright池中String对象的引用所以最后一行打印出true。

1.3 final String类的定义是用final修饰的所以系统中不能有String的子类这也是出于系统安全性的考虑。字符串操作中常用的优化方法

2.1 split()方法优化通常情况下split()方法给我们带来了很大的便利但是它的性能并不是很好。建议结合indexOf()和subString()方法进行自定义拆分这样性能会有明显提升。

2.2字符串常量累积运算的优化方法示例代码:

结果:

如上例所示使用+号拼接字符串的效率明显较低而使用StringBuffer和StringBuilder的append()方法的效率是使用+号的100倍甚至1000倍而StringBuffer的效率低于StringBuilder。这是因为StringBuffer实现了线程安全低效率是不可避免的。所以在串积累的操作中建议结合线程问题避免使用+号拼接串。

2.3 StringBuffer和StringBuilder的选择在上面的例子中已经使用了string buffer和StringBuilder它们之间只有线程安全上的区别。所以在不考虑线程安全的情况下建议使用性能相对较高的StringBuilder类。如果系统要求线程安全选择StringBuffer类。

2.4将基本数据类型转换为字符串类型的优化方案

示例代码:

上例中String.valueOf()直接调用底层Integer.toString()方法但会先判断空;+””由StringBuilder实现先调用append()方法再调用toString()方法获取字符串;Num.toString()直接调用Integer.toString()方法所以效率是:num.toString()方法最快其次是String.valueOf(num)最后是num+””的方式。以下是结果截图:

童鞋建议避免使用+””更好使用基本数据类型附带的toString()方法。先分享到这里吧!!!