Java中String性能优化

不用使用String的构造函数,可能的话直接使用字符串。

两个特例:

1)想把char []转换为一个String,
2) 使用一个大的String对象的substring()方法;

String.equals() 比 String.equalsIgnoreCase()要快;

尽量使用StringBuilder来构造一个String,而不是“+”操作符和String.concat() (除非是一个表达式,String s = a + b + c);

StringBuilder是不同步的(not synchronized ),所以要比StringBuffer快;

在String[Buffer|Builder]构造函数中加上容量参数,因为创建一个太小的buffer会降低性能;

String.length()==0比String.equals("")要快。使用Java 6时,String.isEmpty()更快;

调用String.toString()是没有意义的;

由于String是不可变的,所以String的方法中,所有返回修改过的String的都是返回了一个新的实例;

String.split(regex)事实上简单的调用了Pattern.compile(regex).split(this, limit),且每次compile()都会返回一个新Pattern。所以如果频繁调用split的话,最好创建单个Pattern实例并重复使用来取代split()。

以上就是本文要给大家分享的内容了,希望大家能够喜欢。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

(0)

相关推荐

  • Java虚拟机JVM性能优化(三):垃圾收集详解

    Java平台的垃圾收集机制显著提高了开发者的效率,但是一个实现糟糕的垃圾收集器可能过多地消耗应用程序的资源.在Java虚拟机性能优化系列的第三部分,Eva Andreasson向Java初学者介绍了Java平台的内存模型和垃圾收集机制.她解释了为什么碎片化(而不是垃圾收集)是Java应用程序性能的主要问题所在,以及为什么分代垃圾收集和压缩是目前处理Java应用程序碎片化的主要办法(但不是最有新意的). 垃圾收集(GC)的目的是释放那些不再被任何活动对象引用的Java对象所占用的内存,它是Java

  • Java编程代码性能优化

    一.咱们之所以这么干的目的: 1.效率(最重要) 2.可读性,便于后期维护.(同样很重要) 二.代码优化的要求: 1.减小代码的体积. 2.提高代码的运行效率. 三.常用的代码的优化: 1.尽量重用对象 : 特别是String对象的重用.最常用的就是字符串的拼接: 当遇到频繁擦拼接String时.记住一定用StringBuilder/StringBuffer 例如: ArrayList<String> list; //省去list初始化. StringBuilder builder = new

  • Java代码性能优化的35个方法总结

    代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的. 代码优化细节如下: 1.尽

  • 剖析Java中HashMap数据结构的源码及其性能优化

    存储结构 首先,HashMap是基于哈希表存储的.它内部有一个数组,当元素要存储的时候,先计算其key的哈希值,根据哈希值找到元素在数组中对应的下标.如果这个位置没有元素,就直接把当前元素放进去,如果有元素了(这里记为A),就把当前元素链接到元素A的前面,然后把当前元素放入数组中.所以在Hashmap中,数组其实保存的是链表的首节点.下面是百度百科的一张图: 如上图,每个元素是一个Entry对象,在其中保存了元素的key和value,还有一个指针可用于指向下一个对象.所有哈希值相同的key(也就

  • Java性能优化技巧汇总

    本文实例汇总了Java性能优化技巧.分享给大家供大家参考.具体分析如下: 这里参考了些书籍,网络资源整理出来,适合于大多数Java应用 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1.尽量使用final修饰符. 带有final修饰符的类是不可派生的.在JAVA核心API中,有许多应用final的例子,例如java.lang.String.为String类指定final防止了使用者覆盖length()方法.另外,如

  • Java虚拟机JVM性能优化(二):编译器

    本文将是JVM 性能优化系列的第二篇文章(第一篇:传送门),Java 编译器将是本文讨论的核心内容. 本文中,作者(Eva Andreasson)首先介绍了不同种类的编译器,并对客户端编译,服务器端编译器和多层编译的运行性能进行了对比.然后,在文章的最后介绍了几种常见的JVM优化方法,如死代码消除,代码嵌入以及循环体优化. Java最引以为豪的特性"平台独立性"正是源于Java编译器.软件开发人员尽其所能写出最好的java应用程序,紧接着后台运行的编译器产生高效的基于目标平台的可执行代

  • Java中性能优化的35种方法汇总

    前言 对程序员们来说,代码优化是一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的.

  • Java虚拟机JVM性能优化(一):JVM知识总结

    Java应用程序是运行在JVM上的,但是你对JVM技术了解吗?这篇文章(这个系列的第一部分)讲述了经典Java虚拟机是怎么样工作的,例如:Java一次编写的利弊,跨平台引擎,垃圾回收基础知识,经典的GC算法和编译优化.之后的文章会讲JVM性能优化,包括最新的JVM设计--支持当今高并发Java应用的性能和扩展. 如果你是一个开发人员,你肯定遇到过这样的特殊感觉,你突然灵光一现,所有的思路连接起来了,你能以一个新的视角来回想起你以前的想法.我个人很喜欢学习新知识带来的这种感觉.我已经有过很多次这样

  • Android性能优化之利用Rxlifecycle解决RxJava内存泄漏详解

    前言: 其实RxJava引起的内存泄漏是我无意中发现了,本来是想了解Retrofit与RxJava相结合中是如何通过适配器模式解决的,结果却发现了RxJava是会引起内存泄漏的,所有想着查找一下资料学习一下如何解决RxJava引起的内存泄漏,就查到了利用Rxlifecycle开源框架可以解决,今天周末就来学习一下如何使用Rxlifecycle. 引用泄漏的背景: RxJava作为一种响应式编程框架,是目前编程界网红,可谓是家喻户晓,其简洁的编码风格.易用易读的链式方法调用.强大的异步支持等使得R

  • Java中String性能优化

    不用使用String的构造函数,可能的话直接使用字符串. 两个特例: 1)想把char []转换为一个String, 2) 使用一个大的String对象的substring()方法: String.equals() 比 String.equalsIgnoreCase()要快: 尽量使用StringBuilder来构造一个String,而不是"+"操作符和String.concat() (除非是一个表达式,String s = a + b + c): StringBuilder是不同步的

  • 从内存方面解释Java中String与StringBuilder的性能差异

    以前经常在网上看到关于Java字符串拼接等方面的讨论.看到有些Java开发人员在给新手程序员的建议中类似如下写道: 不要使用+号拼接字符串,要使用StringBuffer或StringBuilder的append()方法来拼接字符串. 不过,用+号拼接字符串就真的那么令人讨厌,难道使用+号拼接字符串就没有一点可取之处吗? 通过查阅Java API文档中关于String类的部分内容,我们可以看到如下片段: "Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串

  • java 中String和StringBuffer与StringBuilder的区别及使用方法

    java 中String和StringBuffer与StringBuilder的区别及使用方法 1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a"; //假设a指向地址0x0001 a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向

  • 区分java中String+String和String+char

    我们来考虑一个关于java中String的问题: "abc" + '/'和 "abc" + "/"的区别. 通过这个例子, 我们可以顺便练习一下JDK工具中javap的用法, 原问题是这样的: 把斜杠/当作字符或字符串有什么区别呢? 一个是当作基本数据类型char,一个是对象String.具体有什么区别呢? 当作字符效率会更高吗? String str = "abc" + '/'; 和 String str = "a

  • JAVA中String介绍及常见面试题小结

    字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 深刻认识String 1)String为字符串常量:即String对象一旦创建之后该对象是不可更改的.(源码如下) String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); System.out.println(str1 == st

  • 浅析java中String类型中“==”与“equal”的区别

    一.前言 1.1.首先很多人都知道,String中用"=="比较的是地址,用equals比较的是内容,很多人对此用的是记忆法,通过记忆来加强此的引用,但是其真正的原理其实并不难,当我们真正明白其为什么的时候,用起来也会更加灵活,更加有底气(形容得不太好,朋友别见怪): 二相关知识的准备 类型常量池 运行时常量池 字符串常量池 我们今天讨论的主题是当然是字符串常量池: 为什么在这要把另外两个常量池拿出说一下呢,首先小生我在网上或者cnds上看到很多人在争论字符串常量池是存在与方法区还是堆

  • 详解java中String、StringBuilder、StringBuffer的区别

    你知道String.StringBuilder.Stringbuffer的区别吗?当你创建字符串的时候,有考虑过该使用哪个吗? 别急,这篇文章带你解决这些问题. 可变性 首先,String是字符串,我们一般这样声明: String s = "abc"; String类使用被final修饰的char数组来存储字符串的内容,它的一大特性就是不可变,怎么理解这个不可变呢? 我们知道,一个类被final修饰,那么这个类无法被继承,方法也不能被重写,属性也不能改变. 看看这段代码: String

  • 关于Java中String创建的字符串对象内存分配测试问题

    一.创建String对象的两种常用方法比较 举例说明 String str1 = "Java天下第一"; //方法1 String str2 = new String("Java天下第一"); //方法2 System.out.println(str1 == str2); //比较地址,false System.out.println(str1 == str2.intern()); //true 区别 2.1 方法1中,首先会去JVM的常量池里查找是否有存储&quo

  • java中String、StringBuffer与StringBuilder的区别

    String String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁. 这个是String类的解释,之前小咸儿看到这个情况,不能理解上述的解释,如下 String a = "123"; a = "456"; // 打印出来的a为456 System.out.println(a) 看到这里,小咸儿不明白了,这不是明明已经对他进行修改了吗?为什么还说他是一个不可变类呢? 经过小咸儿和小伙伴们的学习,明白

  • java中String StringBuffer和StringBuilder的区别详解

    目录 从声明定义上来谈 从结构上来谈 从线程安全来谈 总结 从声明定义上来谈 只有String 可以 直接声明创建 而 StringBuffer 与 StringBuilder 必须去new对象 这是因为只有String会在这种声明方式下去字符串常量池创建,其他则没有 StringBuffer stf = new StringBuffer("abc"); StringBuilder stb = new StringBuilder("abc"); StringBuff

随机推荐