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. 我们为什么要使用 href="javascript:void(0)"

    做过web前端UI的小伙伴们都知道,有时候我们在网页中会使用一些超级链接,而这些链接不用指向任何地址,只是为了配合javascript的onclick事件而存在的,当我们点击这些链接时(其实也可以看做 ...

  2. Debian7系统安装配置手册

    一.安装系统 系统版本:Debian7 参考资料:http://www.myhack58.com/Article/48/66/2013/39802.htm 二.配置源 vi /etc/apt/sour ...

  3. sqlServer2008 手工注入

    接着上一篇的<mysql手工注入> 参考:http://hi.baidu.com/ciqing_s/item/971bf994365130accc80e5ed http://hi.baid ...

  4. 【python】 开始第一个项目

    根据这篇文章开始上手 http://www.oschina.net/translate/the-flask-mega-tutorial-part-i-hello-world 再加点东西 如果你的环境是 ...

  5. final ,override关键字

    final 有时我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类.为了实现这一目的,c++ 11新标准提供了一种防止继承发生的方法,即在类名后跟一个关键字final: ...

  6. SlimDx绘制点图元的问题

    问题:点图元在自己创建的三维环境里渲染不出来,代码如下: GMCustomVertex.PositionNormalColored wellPart = new GMCustomVertex.Posi ...

  7. Ubuntu 下为 Idea 创建启动图标.

    默认情况下,ubuntu将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,需要在该目录下创建一个名为“Idea.desktop”的文件.通 ...

  8. WPF 多线程处理(6)

    WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 以下是子窗体的UI: <Window ...

  9. android禁止ScrollView自动滚动

    当Scrollview嵌套listview,或者子View的内容过多时,当内容加载完成后,ScrollView中内容的长度会发生改变,ScrollView会自动往下滚动,解决办法:在ScollView ...

  10. [C#]Linq To Xml 实例操作- 转

    http://blog.sina.com.cn/s/blog_6c762bb301010oi5.html http://blog.xuite.net/cppbuilder/blog/9940157 在 ...