package com.wangzhu.string;

/**
* String类是final类,也就是说String类不能被继承,并且其成员方法都默认为final方法。<br/>
*
*
* @author wangzhu
* @date 2015-2-1下午5:42:19
*
*/
public class StringDemo1 { public static void main(String[] args) {
String str = "";
for (int i = 0; i < 10000; i++) {
str += "test";
} }
}

使用命令反编译字节码:javap -c StringDemo1

从上可知,在行8处创建了一个StringBuilder对象,并且每次循环都会重新创建一个StringBuilder对象。

备注:行8到35是循环部分。

package com.wangzhu.string;

/**
* 内容可以进行修改,并且其并没有重写equals与hashcode方法<br/>
*
* @author wangzhu
* @date 2015-2-1下午5:49:02
*
*/
public class StringBuilderDemo1 { public static void main(String[] args) {
StringBuilder accum = new StringBuilder();
for (int i = 0; i < 10000; i++) {
accum.append("test");
}
}
}

使用命令反编译字节码:javap -c StringDemo1

从上可知,只创建了一个StringBuilder对象。备注:行13到27是循环部分。

结论:StringBuilder的例子中,从头到尾只创建了一个StringBuilder对象,而String的例子中,每一次循环中都创建了一个StringBuilder对象,故String的效率低于StringBuilder。

其他:

package com.wangzhu.string;

public class StringDemo2 {

    /**
* @param args
*/
public static void main(String[] args) {
String str1 = "a1";
String str2 = "a" + 1;
System.out.println(str1 == str2);// true /**
* 分析:在程序编译期间,JVM就将字符串常量的+连接优化为连接后的值。即在编译期字符串常量的值就确定下来了。<br/>
*/ String str21 = "ab";
String str22 = "b";
String str23 = "a" + str22;
System.out.println(str21 == str23);// false
/**
* 分析:JVM对于字符串引用,由于在字符串的+连接中,有字符串引用的存在,故引用的值在程序编译期无法确定,<br/>
* 只有在程序运行期来动态分配并将连接后的新地址赋给变量。
*/ String str31 = "ab";
final String str32 = "b";
String str33 = "a" + str32;
System.out.println(str31 == str33);// true
/**
* 分析:对于final修饰的变量,其在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到其字节码流中。<br/>
*/ System.out.println(str21 == str23.intern());// true
/**
* 分析:使用String的intern方法,会返回该字符串在常量池中的地址值。<br/>
*/
} }

String与StringBuilder的更多相关文章

  1. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  2. String,StringBuffer,StringBuilder的区别

    public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...

  3. 探秘Java中的String、StringBuilder以及StringBuffer

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...

  4. String PK StringBuilder,传说就是传说,只有动手实验,才能得出确定的答案

    本机测试结果如下: 大部分情况下,string 性能并不比StringBuilder差,只有特殊情况才出现差异,并非 如前面有些朋友测试的结果哪样,只要使用StringBuilder 就一定比Stri ...

  5. (原)String、StringBuilder、StringBuffer作为形参

    今天在刷一道算法题时,突然遇到StringBuilder作为形参和String作为形参时,最终得出来的结果不同.故尝试了几个demo看看它们之间的区别. 当String类型作为参数时, public ...

  6. 关于String StringBuffer StringBuilder

    0. String对象的创建       1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...

  7. string与stringBuilder的效率与内存占用实测

    using UnityEngine; using System.Diagnostics; using System.Text; using UnityEngine.UI; public class s ...

  8. C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)

    前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...

  9. 探秘Java中String、StringBuilder以及StringBuffer

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...

  10. String、StringBuilder

    public class testString{ public static void main(String[] args) { String a="cool"; String ...

随机推荐

  1. 启语外语培训网SEO历程

    网站开发完成已经好长时间了,但收录一直上不去,排名也上不去.我这篇文章主要是分析一下网站的SEO历程 网址:http://waiyupx.cheer-edu.net/School/School-5.h ...

  2. Entity Framework 一次加载许多个 Fluent API 映射

    可通过多种方法来指定模型的 Fluent 映射(从类到数据库). 1.直接在 DbContext 类的 OnModel­Creating 方法中进行映射,如下所示: protected overrid ...

  3. MQTT开发小记(一)

    最近在协助公司硬件组进行MQTT协议的嵌入式SDK包开发. 简述一下MQTT MQTT简单的来说是一种订阅/发布模式的通信形式,一般分为客户端和服务器端. MQTT服务器端可以简单理解为一个消息中转站 ...

  4. 利用Apply的参数数组化来提高代码的优雅性,及高效性

    利用Apply的参数数组化来提高代码的优雅性,及高效性 Function.apply()在提升程序性能方面的技巧 我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所 ...

  5. Java String.split()注意点

    //String[] aa = "aaa|bbb|ccc".split("|");//错误 String[] aa = "aaa|bbb|ccc&qu ...

  6. 使用libuv实现生产者和消费者模式

    生产者和消费者模式(Consumer + Producer model) 用于把耗时操作(生产线程),分配给一个或者多个额外线程执行(消费线程),从而提高生产线程的响应速度(并发能力) 定义 type ...

  7. DB天气app冲刺二阶段第九天

    今天是第九天了 不管怎么样也要收尾了赶紧,毕竟不可能做到尽善尽美了,时间不够了所以要把该砍掉的砍点,然后应对下周的大二同学的面试.尽量做好界面的美化工作这是最基本的了.毕竟我一直崇尚的就是UI设计了. ...

  8. DB天气app冲刺二阶段第八天

    今天突然感觉应该做收尾工作了 因为马上就要考试了,时间一下子就不够用了.. 今天主要修复了一下bug,然后天气基本能够实时准确了,就是多功能按钮还是没有弄好 准备简化一下功能. 明天看看还有什么需要改 ...

  9. highCharts 电流表、电压表

    var highChartsSettingV = { chart: { margin: [5, 2, 5, 8], type: 'gauge', plotBorderWidth: 1, plotBac ...

  10. Caffe安装教程(原创)

    转载请注明地址 说明:本文档参考自Caffe官网的安装说明,http://caffe.berkeleyvision.org/installation.html 如果对安装过程中,需要用到的依赖不明,请 ...