字符串。

  • 推荐使用String直接量赋值

        Java为了避免在一个系统中大量产生String对象(为什么会大量产生?因为String字符串是程序中最经常使用的类型),于是就设计了一个字符串池(也有叫做字符串常量池,String Pool或String Constant Pool或String Literal Pool),在字符串池中所容纳的都是String字符串对象,他的创造机制是这样的:创建一个字符串时,首先检查池中是否有字面值相等的字符串,如果有,则不再创建。直接返回池中该对象的引用,若没有则创建之,然后放到池中,并返回新建对象的引用。

        String类是一个不可变(Immutable)对象其实有两层意思:一是String类是final类,不可继承,不可能产生一个String的子类;二是在String类提供的所有方法中,如果String返回值,就会新建一个String对象,不对原对象进行修改,这也就保证了原对象是不可改变的。

        Java的每个对象都保存在堆内存中,但是字符串池非常特殊,他在编译期已经决定了其存在JVM的常量池(Constant Pool),垃圾回收器是不会对他进行回收的。

  • 注意方法中传递的参数要求

        注意:replaceAll传递的第一个参数是正则表达式。

  • 正确使用String、StringBuffer、StringBuilder

        在不同的场景下使用不同的字符序列:

        1、使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算等。

        2、使用StringBuffer类的场景:在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装等。

        3、使用StringBuilder类的场景:在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼接、JSON封装等。

  • 注意字符串的位置

        Java对加号的处理机制:在使用加号进行计算的表达式中,只要遇到String字符串,则所有的数据都会转换为String类型进行拼接,如果是原始数据,则直接拼接,如果是对象,则调用toString方法的返回值然后拼接。

        注意:在“+”表达式中,String字符串具有最高优先级。

  • 自由选择字符串拼接方法

        字符串拼接方式中,append方法最快,concat方法次之,加号最慢。

        1、“+”方法拼接字符串:虽然编译器对字符串的加号做了优化,他会使用StringBuilder的append方法进行追加,按道理来说,其执行时间也应该是0毫秒,不过他最终是通过toString方法转换成String字符串的。

            注意:他与纯粹使用StringBuilder的append方法是不同的:一是每次循环都会创建一个StringBuilder对象,二是每次执行完毕都要调用toString方法将其转换为字符串。

        2、concat方法拼接字符串:就是一个数组拷贝,虽然在内存中的处理都是原子性操作,速度非常快,不过,注意最后的return语句,每次的concat操作都会新创建一个String对象。

        3、append方法拼接字符串:都在做字符数组处理,加长,然后数组拷贝,这些都是基本的数据处理,没有新建任何对象,所以速度也就最快了!

        三者的实现方法不同,性能也就不同,但并不表示我们一定要使用StringBuilder,这是因为“+”非常符合我们的编码习惯,适合人类阅读,两个字符串拼接,就用加号连一下,这很正常,也很友好,在大多数情况下我们都可以使用加号操作,只有在系统性能临界(如在性能“增之一分则太长”的情况下)的时候才可以考虑使用concat或append方法。而且,很多时候系统80%的性能是消耗在20%的代码上的,我们的精力应该更多的投入到算法和结构上。

  • 推荐在复杂字符串操作中使用正则表达式

        正则表达式在字符串的查找、替换、剪切、复制、删除等方面有着非凡的作用,特别是面对大量的文本字符需要处理()如需要读取大量的LOG日志时,使用正则表达式可以大幅的提高开发效率和系统性能。

  • 强烈建议使用UTF编码

        注意:一个系统使用统一的编码。

  • 对字符串排序持一种宽容的心态

        Arrays工具类的默认排序是通过数组元素的compareTo方法来进行比较的。

        对于非英文的String排序可能会出现不准确的情况,Java推荐使用Collator类进行滚排序。

        如果是排序对象是经常使用的汉字,使用Collator类排序完全可以满足我们的要求,毕竟GB2312已经包含了大部分的汉字,如果需要严格排序,则要使用一些开源项目来自己实现了,比如pinyin4j可以把汉字转换为拼音,然后我们自己来实现排序算法,不过此时你也会发现要考虑诸如算法、同音字、多音字等众多问题。

        注意:如果排序不是一个关键算法,使用Collator类即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件求生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值