- 浏览: 268917 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 4087背景 项目中有个设计不合理的表,总共 8 个字段,有 ... -
Java8 Striped64 和 LongAdder
2014-05-18 16:41 2205原文链接:码蜂笔 ... -
内存关卡/栅栏 ( Memory Barriers / Fences ) – 译
2013-12-23 20:37 2090原文地址:http://coderbee.net/i ... -
Java 内存模型 JMM
2013-12-23 20:33 1619原文地址:http://c ... -
False Sharing 伪共享 – 译
2013-11-20 22:59 1178原文地址:http://code ... -
JUC 原子类
2013-11-20 22:57 1282原文地址: http://coderbee.net/i ... -
JVM 垃圾回收算法
2013-11-01 09:32 1178原文: http://coderbee.net/i ... -
java.util.HashMap 源码解读及其进化
2013-10-18 16:47 1666原文: http://coderbee. ... -
JVM 运行时数据区
2013-10-17 22:59 1551原文地址: http://c ... -
Java 8 之 java.time 包
2013-10-15 16:33 15988原文:http://coderbee.net/inde ... -
J.U.C 包
2013-09-27 17:37 1173原文在:http://code ... -
Java 8 新特性之 接口改进和Lambdas
2013-09-14 16:44 3951本文首先发表在 码蜂笔记:http://coderbe ... -
struts2 漏洞 和 缓存攻击
2013-07-19 21:37 2173本文首先发表在我的独立博客站点: 码蜂笔记 ... -
非递归、固定量额外存储空间 遍历二叉树
2013-06-18 22:23 2271原文发表于: http://cod ... -
rsync 核心算法的Java实现
2012-11-17 21:44 4995rsync 算法 场景:假设有两台计算机 CA和 ... -
Java program idiom之 容器
2012-07-04 10:57 1350Java常用的集合类型有 List 、 Set 、 ... -
Java program idiom之 数组
2012-07-03 20:15 1068数组是一种效率最高的存储和随机访问对象引用序列的方式,数组有固 ... -
java program idiom之 资源初始化与清理
2012-07-02 16:39 1180源的初始化与关闭是非常常见的操作,也是很容易出错的地方。Jav ... -
致力于提高Java初级程序员技能的一个努力
2012-06-19 20:58 1259工作近3年,完全从零开始开发的项目较少,基本上都是接手别人的项 ... -
java.util.ServiceLoader demo
2012-05-25 16:45 2908首先引用API中的说明文 ...
相关推荐
"idiom翻译软件"是一款专为用户提供了高效翻译服务的应用程序。它被设计用来帮助用户理解和传达不同语言之间的意义,确保跨文化交流的准确性和流畅性。这款软件在经过实际测试后,被认为是非常实用且功能完备的。 ...
useEnglish 资源E nglish Phrasal Verb & Idiom
四字成语mysql数据30810条
资源来自pypi官网。 资源全名:china_idiom-0.0.2-py3-none-any.whl
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 WorldServer Desktop Workbench 8.1.0.208 使用指南:关键知识点解析 #### 一、概述与快速入门 **Idiom WorldServer Desktop Workbench**是一款专为语言服务提供商(LSPs)和企业翻译部门设计的翻译记忆...
private static final String CREATE_TABLE_IDiom = "CREATE TABLE IF NOT EXISTS " + "idiom" + " (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "idiom TEXT," + "explanation TEXT)"; public ...
成语Idiom 是 AngularJS 的新翻译系统,它允许您在当前范围内阅读以提供基于上下文的翻译 - 没有更多的东西,他/她,您实际上知道您在写什么。 #用法向您的项目添加一个文件夹,其中包含每种语言的一个 json 文件...
public Idiom(String id, String content) { this.id = id; this.content = content; } // getters and setters... } ``` 接着,我们可以创建一个基于泛型的图类,其中包含节点(这里就是成语)的集合以及...
【标题】"猜成语小程序数据库表ims_yf_chengyu_idiom"涉及到的是一个与成语相关的微信小程序的数据存储结构。这个数据库表很可能是用来管理小程序内部的成语信息,包括成语的ID、成语内容、含义、出处等关键数据,以...
"Idiom-看图猜成语程序"是一款基于Python语言开发的应用,旨在提供一种娱乐与学习相结合的方式,让用户通过观察图片来猜测对应的成语。这个程序可能是为教育或休闲目的设计的,利用Python的图像处理和人机交互功能,...
**Pimpl Idiom(指针实现技巧)** 在C++编程中,`Pimpl Idiom`,也称为`Pointer to Implementation`或`Impl Pointer`,是一种设计模式,它用于实现类接口与其实现的分离,以提高代码的编译时间和模块化。这种技术的...
AI-Algorithm-Idiom-in-Prolog-Lisp-Java 《Prolog、Lisp 和 Java 中的 AI、Alogirhtm、数据结构和习语》一书的代码
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...
//The standard idiom for using the wait methods synchronized (obj) { while (condition does not hold) obj.wait(); //(Releases lock, and reacquires on wakeup) // Perform action appropriate to ...
自然语言处理相关的分词数据
4. **Idiom\weapp-idiom\pages\guess\guess.js**:这是微信小程序(WeChat Mini Program)中的一个页面脚本,用于实现“猜成语”页面的逻辑,包括处理用户输入、显示成语图片、验证答案等功能。 5. **Idiom\weapp-...