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. System Generator入门笔记

    System Generator入门笔记  [CPLD/FPGA] 发布时间:2010-04-08 23:02:09  System Generator是Xilinx公司进行数字信号处理开发的一种设计 ...

  2. winform 批量导入本地sql文件,批量导入mdb(access)文件到sqlserver

    0.数据库连接 private void button1_Click(object sender, EventArgs e) { this.btnUpdate.Enabled = false; #re ...

  3. EventHandler委托的使用

    今天复习了一下事件和委托,本来看事件来着,看到EventHandler,写了一个小例子,想贴在这里解释一下.为了弄清楚EventHandler, 还是回归到最基本的委托,曾经在园子里看到一位前辈用深入 ...

  4. jar 命令打war包

    假定有一个Web应用:C:\myHomemyHome/WEB-INF/……myHome/files/……myHome/image/……myHome/src/……myHome/index.jsp在命令行 ...

  5. MySQL Server-id的作用

    1. mysql同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,因此server-id一定要有的 2. 每一个同步中的slave在master上都对应一个mast ...

  6. andriod

    谷歌提供的安卓源码中,网址如下:http://androidxref.com http://blog.csdn.net/zoe6553/article/details/6622258

  7. MVC的小知识点

    1.MVC的前台页面编译完之后,也会生成一个前台页面类.在前天页面中加入这段代码this.GetType().Assembly.GetLocation()得到当前类所在的程序集,可以查看其所在的程序, ...

  8. UIWebView 需改userAgent 并且加载微信公共账号

    需要注意的是需要获取原来的UIWebView的User-Agent,然后拼接上自己新的User-Agent,貌似直接替换原来的无效,另外,修改User-Agent之后重新创建UIWebView加载网页 ...

  9. oracle 常用SQL语法手册

    Select 用途: 从指定表中取出指定的列的数据 语法: SELECT column_name(s) FROM table_name 解释: 从数据库中选取资料列,并允许从一或多个资料表中,选取一或 ...

  10. Week1 Team Homework #2 Introduction of team member with photos

    小组成员介绍 组长:黄剑锟       11061164 组员:顾泽鹏        11061160 组员:周辰光         11061154 组员:龚少波        11061167 组 ...