博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十三章:字符串 《Thinking in java》学习笔记
阅读量:6926 次
发布时间:2019-06-27

本文共 1263 字,大约阅读时间需要 4 分钟。

  正如书中开头所说:字符串操作是计算机程序中最常见的行为;尤其是再java大展拳脚的web系统中更是如此,下面就java的字符串的特性,个人做下总结吧,有错误的地方希望有人能提出,我一定会及时更正。

  学过编程的都会知道,字符串是常量中的一种,然而java中的String不仅仅是常量,又是类,是一个特殊的类,是不可变和最终类;

1,不可变的String;说到不可变性,就要说java中String的内存分配了,如下图

  当运行代码:

        String str = "abc";

时,内存分布为

  

  这时候看起来和一个int a = 26;很相似了,StringPool是常量池里面用来存放字符串常量的地方,里面的值不可修改

而如果代码是这样写的:

  String str = new String("abc");

 

运行时,内存为:

  

理解了上面的内存分布情况后,就不难理解String的不变性了,java中程序员不能重载操作符,用于String的“+”和“+=”是java中仅有的两个重载过的操作符;

比如如下代码:

  String str1 = "abc";

  String str2 = str1 + "def";

运行到第二行代码时,实际上JVM又一次帮助我们做了一些工作:

  

1 public class MyString {
2 public static void main(String[] args){
3 String str1 = "abc"; 4 StringBuilder temp = new StringBuilder("abc"); 5 temp.append("def"); 6 String str2 = temp.toString(); 7 } 8 }

内存分配如下:

而其中J2SE5.0之后才使用了StringBuilder,之前是使用的StringBuffer,

二者使用起来没有什么区别,StringBuffer是线程安全的,速度慢些;StringBuilder是线程不安全的,但是速度快些;

2,String是最终类,不能有子类,这一点可以通过API文档看出:

public final class String extends  implements , <>, {
....
}
ps: 天气真冷,手敲键盘都哆嗦,干脆就画画内存图来说明了,没有用什么代码来证明,再说大家日常编码中不会一日无String,所以也不需要我写多少字符串的代码了;
还有,本章书中还介绍了一个重要的部分--《正则表达式》,这部分我自己也不是很熟悉,知道些而已,具体底层的实现我也不清楚,等日后补上吧。

 

转载于:https://www.cnblogs.com/silence250627170/archive/2011/12/24/2300666.html

你可能感兴趣的文章
Android中pm命令用法(转)
查看>>
Report_报表中Ref Cursor数据源的概念和用法(案例)
查看>>
python使用psutil获取服务器信息
查看>>
苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
查看>>
常用Mysql存储引擎--InnoDB和MyISAM简单总结
查看>>
Spring Security笔记:登录尝试次数限制
查看>>
Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725
查看>>
SQLMap用户手册【超详细】
查看>>
HDOJ 4884 & BestCoder#2 1002
查看>>
Validate Binary Search Tree leetcode java
查看>>
【编程题目】在二元树中找出和为某一值的所有路径(树)
查看>>
脱裤子放屁,多此一举
查看>>
445port入侵具体解释
查看>>
Git学习笔记(二)
查看>>
美妙的 CSS3 动画!一组梦幻般的按钮效果
查看>>
微软历史最高市值是多少?
查看>>
Linux Shell脚本Ldd命令原理及使用方法
查看>>
[ucgui] 对话框8——Framewin小工具
查看>>
Ununtu 12.04 gedit安装插件Source Code Browser
查看>>
Docker学习总结之Docker与Vagrant之间的特点比较
查看>>