- 浏览: 264191 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
wen866595:
cywhoyi 写道wen866595 写道cywhoyi 写 ...
mybatis 批量插入插件 -
cywhoyi:
wen866595 写道cywhoyi 写道我觉得是否考虑数据 ...
mybatis 批量插入插件 -
wen866595:
cywhoyi 写道我觉得是否考虑数据路由,你这样方式治标不治 ...
mybatis 批量插入插件 -
cywhoyi:
我觉得是否考虑数据路由,你这样方式治标不治本
mybatis 批量插入插件 -
wy75792:
不错不错
oracle 存储过程 基础
1.1. String API
String对象是不可变的,那些看似改变了对象的方法其实是返回新的 String 对象,有一些方法使用时是要注意的。
A、 substring、 subSequence 方法。
String底层是使用字符数组来存储的, substring 、 subSequence 方法返回新的String 或 CharSequence ,共享底层的字节数组,因为它是不可变的,这能提升性能,但也能导致问题。
如果原字符串是一个很大的临时字符串,但只需保留一小块子字符串时,使用sub* 就会导致内存的浪费。这篇博客描述了问题的情况:
http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/
B、 实现对象的toString 方法
这点是任何类实现toString 方法时都必须注意的。
public class InfinitRecursion { public String toString() { return "address:" + this; } public static void main(String[] args) { new InfinitRecursion().toString(); } }
InfinitRecursion 类的 toString方法是希望输出对象的内存地址,但调用这个方法将导致 StackOverflowError ,因为使用"+" 连接时会,编译器看到 this 不是一个 String 对象,会尝试将 this 转换成一个 String ,而这个转换就是通过调用 toString 方法实现的,这就无意发生了递归调用,导致栈溢出异常。要打印对象的内存地址,应该使用 Object.toString() 。
1.2. 字符串拼接
字符串拼接一般有:+ 、 StringBuffer 、 StringBuilder 三种形式。
+拼接示例:
public static void main(String[] args) { String a = "123" + "456" + "a"; String ab = a + "b" + "+-*/"; String abc = ab + "c"; }
使用 “ javap -c 类名 ” 查看编译后的字节码大致是这样的:
public static void main(java.lang.String[]);
Code:
0: ldc #2 // String 123456a
2: astore_1
3: new #3 // class java/lang/StringBuilder
6: dup
7: invokespecial #4 // Method java/lang/StringBuilder."<
init>":()V
10: aload_1
11: invokevirtual #5 // Method java/lang/StringBuilder.ap
pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldc #6 // String b
16: invokevirtual #5 // Method java/lang/StringBuilder.ap
pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: ldc #7 // String +-*/
21: invokevirtual #5 // Method java/lang/StringBuilder.ap
pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
24: invokevirtual #8 // Method java/lang/StringBuilder.to
String:()Ljava/lang/String;
27: astore_2
28: new #3 // class java/lang/StringBuilder
31: dup
32: invokespecial #4 // Method java/lang/StringBuilder."<
init>":()V
35: aload_2
36: invokevirtual #5 // Method java/lang/StringBuilder.ap
pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
39: ldc #9 // String c
41: invokevirtual #5 // Method java/lang/StringBuilder.ap
pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
44: invokevirtual #8 // Method java/lang/StringBuilder.to
String:()Ljava/lang/String;
47: astore_3
48: return
从字节码可以看到:
1、 “0: ldc #2 // String 123456a ” 说明如果 + 只涉及常量,编译器会把常量合并了;
2、 从第14 、 16 、 19 、 21 字节码指令说明,如果 + 操作中涉及变量,编译器不会合并常量;
3、 第3 到 24 条字节码指令说明,编译器将 + 操作转换为 StringBuidler.append 操作,在执行赋值语句时会调用 StringBuilder.toString 方法来生成完整的字符串。
4、 从3 到 24 条指令 与 28 到 44 条指令说明,对于每条使用 + 拼接进行赋值的语句都会生成一个 StringBuilder 。
根据上面的结果:
1、 尽量不要使用+ 拼接,就算要用,也应该写成一条语句。
2、 绝对不应该在循环语句里使用+ 拼接,这会导致生成大量的 StringBuilder 。
StringBuilder和 StringBuffer 都使用数组作为底层存储结构,通过预分配数组空间,避免在每次 append 时扩容,有助于提升性能。
StringBuffer的所有方法都是线程安全的,在不需要线程安全的情况下,这会带来额外的性能开销。
StringBuilder是非线程安全版的 StringBuffer 。
发表评论
-
mybatis 批量插入插件
2015-08-03 20:40 3958背景 项目中有个设计不合理的表,总共 8 个字段,有 ... -
Java8 Striped64 和 LongAdder
2014-05-18 16:41 2140原文链接:码蜂笔 ... -
内存关卡/栅栏 ( Memory Barriers / Fences ) – 译
2013-12-23 20:37 2031原文地址:http://coderbee.net/i ... -
Java 内存模型 JMM
2013-12-23 20:33 1547原文地址:http://c ... -
False Sharing 伪共享 – 译
2013-11-20 22:59 1124原文地址:http://code ... -
JUC 原子类
2013-11-20 22:57 1218原文地址: http://coderbee.net/i ... -
JVM 垃圾回收算法
2013-11-01 09:32 1124原文: http://coderbee.net/i ... -
java.util.HashMap 源码解读及其进化
2013-10-18 16:47 1609原文: http://coderbee. ... -
JVM 运行时数据区
2013-10-17 22:59 1498原文地址: http://c ... -
Java 8 之 java.time 包
2013-10-15 16:33 15931原文:http://coderbee.net/inde ... -
J.U.C 包
2013-09-27 17:37 1121原文在:http://code ... -
Java 8 新特性之 接口改进和Lambdas
2013-09-14 16:44 3898本文首先发表在 码蜂笔记:http://coderbe ... -
struts2 漏洞 和 缓存攻击
2013-07-19 21:37 2122本文首先发表在我的独立博客站点: 码蜂笔记 ... -
非递归、固定量额外存储空间 遍历二叉树
2013-06-18 22:23 2214原文发表于: http://cod ... -
rsync 核心算法的Java实现
2012-11-17 21:44 4891rsync 算法 场景:假设有两台计算机 CA和 ... -
Java program idiom之 容器
2012-07-04 10:57 1295Java常用的集合类型有 List 、 Set 、 ... -
Java program idiom之 数组
2012-07-03 20:15 1018数组是一种效率最高的存储和随机访问对象引用序列的方式,数组有固 ... -
java program idiom之 资源初始化与清理
2012-07-02 16:39 1087源的初始化与关闭是非常常见的操作,也是很容易出错的地方。Jav ... -
致力于提高Java初级程序员技能的一个努力
2012-06-19 20:58 1215工作近3年,完全从零开始开发的项目较少,基本上都是接手别人的项 ... -
java.util.ServiceLoader demo
2012-05-25 16:45 2843首先引用API中的说明文 ...
相关推荐
useEnglish 资源E nglish Phrasal Verb & Idiom
四字成语mysql数据30810条
好的翻译软件,能用于有效的翻译,是一个非常不错的软件。本人经过测试,完全好用。
This is a common I/O programming idiom. while((bytes_read = from.read(buffer)) != -1) // Read until EOF to.write(buffer, 0, bytes_read); // write } // Always close the streams, even if exceptions...
iom` (`id`, `guid`, `idiom`, `full_pinyin`, `pinyin`, `az`, `description`, `source`, `idiom_traditional`, `spinyin`, `idiom_phonetic`, `idiom_correct_pronunciation`, `idiom_distinguish`, `idiom_...
成语Idiom 是 AngularJS 的新翻译系统,它允许您在当前范围内阅读以提供基于上下文的翻译 - 没有更多的东西,他/她,您实际上知道您在写什么。 #用法向您的项目添加一个文件夹,其中包含每种语言的一个 json 文件...
Idiom WorldServer Desktop Workbench 8.1.0.208 使用指南
AI-Algorithm-Idiom-in-Prolog-Lisp-Java 《Prolog、Lisp 和 Java 中的 AI、Alogirhtm、数据结构和习语》一书的代码
猜成语小程序数据库表ims_yf_chengyu_idiom
实现类 接口和实现的分离 采用pimpl idiom方式
java 8 lambda Concise syntax – More succinct and clear than anonymous inner classes • Deficiencies with anonymous inner classes – Bulky, confusion re “this” and naming in general, no nonfinal var...
资源来自pypi官网。 资源全名:china_idiom-0.0.2-py3-none-any.whl
Emotional Classification of Chinese Idioms Based on Chinese Idiom Knowledge Base
自然语言处理相关的分词数据
Your first Java program ....... 52 Compiling and running ............... 54 Comments and embedded documentation ..................... 55 Comment documentation ............ 55 Syntax .....................
语言:English idiom有助于您阅读外语网站。 点击扩展,然后选择任何单词以说话和翻译。 阅读外国新闻,文学等。
英语习语idiomPPT课件.pptx
American Idioms and Some Phrases Just For Fun
Chinese language idiom is one of the most distinctive categories, which is the focus of the senior stage of the foreign students. This paper conducts a comprehensive investigation based on idiom in ...