String与StringBuilder
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的更多相关文章
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- 探秘Java中的String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- String PK StringBuilder,传说就是传说,只有动手实验,才能得出确定的答案
本机测试结果如下: 大部分情况下,string 性能并不比StringBuilder差,只有特殊情况才出现差异,并非 如前面有些朋友测试的结果哪样,只要使用StringBuilder 就一定比Stri ...
- (原)String、StringBuilder、StringBuffer作为形参
今天在刷一道算法题时,突然遇到StringBuilder作为形参和String作为形参时,最终得出来的结果不同.故尝试了几个demo看看它们之间的区别. 当String类型作为参数时, public ...
- 关于String StringBuffer StringBuilder
0. String对象的创建 1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...
- string与stringBuilder的效率与内存占用实测
using UnityEngine; using System.Diagnostics; using System.Text; using UnityEngine.UI; public class s ...
- C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)
前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...
- 探秘Java中String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- String、StringBuilder
public class testString{ public static void main(String[] args) { String a="cool"; String ...
随机推荐
- Ubuntu14.04 安装 PHP cURL
今天遇到 Fatal error: Call to undefined function curl_init() in /xxx/xxxx/www/application/library/Ku/Htt ...
- Mysql 的MYISAM引擎拷贝出现异常——Incorrect information in file 'xxx.frm'
MYISAM引擎有三个文件 .FRM 存储表结构 .MYD 存储数据 .MYI 存储索引 当复制表时,将这三个文件同时复制到指定目录下. 异常处理: 1. Incorrect info ...
- ref和out
网上对这两个关键字的讨论,已经很多了,先给出一个链接:http://blog.csdn.net/xiaoning8201/article/details/6893154 自己做几条笔记,记得牢一些: ...
- dotNet中初始化器的使用
dotNet中初始化器的使用 2013年12月7日 13:27 有两类初始化器: 对象初始化器和集合初始化器 比如现在有一个User类: Public class User { public in ...
- 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础
第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1 初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...
- Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作
在Java中对Oracle数据库的操作分为两种:一.查询.二.非查询. 下面是我对其进行总结: 一.查询数据 /** * 根据用户代码查询 * @param userId * @return 如果存在 ...
- 小甲鱼汇编语言006第二章 寄存器(CPU工作原理)01
http://baidu.ku6.com/watch/09215216064281951074.html?page=videoMultiNeed
- 【nodejs】jade模板入门
使用jetbrians webstom创建空项目 1.创建package.json 引用依赖配置 { "name": "demojade", "des ...
- Linq to XML 之XElement的Descendants方法的新发现
C#操作XML的方法有很多,但个人认为最方便的莫过于Linq to XML了,特别是XElement的Descendants方法是我最常用的一个方法. 这个方法可以根据节点名(Name)找到当前调用的 ...
- Converting Storyboard from iPhone to iPad
I found out a kind of solution: Duplicate your iPhone-Storyboard and rename it MainStoryboard_iPad.s ...