首页 / JAVA / 深入java字符串原理及其效率分析
深入java字符串原理及其效率分析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了深入java字符串原理及其效率分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3007字,纯文字阅读大概需要5分钟。
内容图文
- java字符串类基本特点
- String类是final的,不可继承
- String类源码实现通过字符数组实现,长度不可改变
- 可以通过String str = "123"来创建一个String对象
- 通过+可以将两个String对象串联,生成新的字符串
- java运行时会维护一个字符串池,String池会保存程序运行中产生的各种字符串,这些字符串内容不能相同
- 字符串创建的几种方式
- 使用new关键字创建 String str = new String("str");
- String str = "a";
- String str = "a",String str2 = str + "bb";
- 字符串创建的关键原理
- 通过任何方式创建的字符串都会在字符串池中查找该字符串是否存在,如果不存在则向字符串池中添加该字符串
- 通过new关键字创建的字符串,会在堆栈中创建一个新的对象
- 通过String str = "aa"+"bb"; 方式创建创建字符串,java只会维护其在字符串池中是否存在
- 如果通过字符串拼接所创建的字符串中存在变量,那么java会在堆栈区中创建一个对象
字符串的不同创建位置比较
- /**
- *
- * 几种字符串创建方式的比较
- *
- */
- public static void compare()
- {
- //指向对象池中的"abc",不在堆栈中创建对象
- String str1 = "abc";
- //指向对象池中的"abc",不在堆栈中创建对象
- String str2 = str1;
- //在堆栈中创建,指向对象
- String str3 = new String("abc");
- //指向对象池中的"abc",不在堆栈中创建对象
- String str4 = "a"+"bc";
- String a = "c";
- //在堆栈中创建对象,并指向该对象
- String str5 = "ab" + a;
- //在堆栈中创建对象,并指向该对象
- String str6 = "ab".concat(a);
- //在堆栈中创建对象,并指向该对象
- String str7 = "ab".concat("c");
- System.out.println(str1==str2);//true
- System.out.println(str1==str3);//false
- System.out.println(str1==str4);//true
- System.out.println(str1==str5);//false
- System.out.println(str1==str6);//false
- System.out.println(str1==str7);//false
- System.out.println(str3==str4);//false
- System.out.println(str3==str5);//false
- System.out.println(str3==str6);//false
- System.out.println(str3==str7);//false
- }
- /**
- * 采用不同的方式创建空字符串
- */
- public static void compareEmpty()
- {
- String str1 = new String("");
- String str2 = "";
- String str3 = new String("");
- //intern()方法会判断字符串是否在字符串池中,如果存在直接返回引用即可
- String str4 = "".intern();
- String str5 = ""+"";
- //trim()方法会在堆栈中创建一个对象
- String str6 = " ".trim();
- String str7 = " ";
- String str8 = " ".trim();
- String str9 = "".concat("");
- System.out.println(str1==str2);//false
- System.out.println(str1==str3);//false
- System.out.println(str1==str4);//false
- System.out.println(str1==str5);//false
- System.out.println(str1==str6);//false
- System.out.println(str1==str7);//false
- System.out.println(str1==str8);//false
- System.out.println(str1==str9);//false
- System.out.println(str2==str3);//false
- System.out.println(str2==str6);//false
- System.out.println(str2==str8);//true
- System.out.println(str2==str9);//false
- System.out.println(str6==str8);//false**
- }
字符串操作中的效率问题
字符串的切分算法采用StringTokenizer的效率优于String的Split方法,字符串切分中StringToken的效率优于split方法 字符串的拼接中采用StringBuilder的效率高于字符串相加或者new String().concat()方法,因为字符串相加或者拼接的方式都会在对象池中查找字符串是否存在,如果不存在则创建,这样在拼接的过程中会产生大量中间过程的字符串,占用内存资源,StringBuilder效率优于StringBuffer,但是StringBuffer线程安全
内容总结
以上是互联网集市为您收集整理的深入java字符串原理及其效率分析全部内容,希望文章能够帮你解决深入java字符串原理及其效率分析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。