知识大全 不再纠结Java中的String类

Posted 常量

篇首语:每个牛逼的人,都有一段苦逼的坚持。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 不再纠结Java中的String类相关的知识,希望对你有一定的参考价值。

不再纠结Java中的String类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    String是我们经常用到的一个类型 其实有时候觉得写程序就是在反复的操作字符串 这是C的特点 在java中 jdk很好的封装了关于字符串的操作 今天主要讲的是三个类String StringBuffer StringBuilder 这三个类基本上满足了我们在不同情景下使用字符串的需求         先说 第一个String         JDK的解释是 Strings are constant; their values cannot be changed after they are created 也就是说String对象一旦被创建就是固定不变的了(你一定有问题 但请先等一等 耐心读下去) 这样的一点好处就是可以多线程之间访问 因为只读不写         一般情况下我们以下面两种方式创建一个String对象         两种方式是有区别的 这和java的内存管理有关 前面已经说过 string创建之后是不可变的 所以按照第一种方式创建的字符串会放在栈里 更确切的是常量池中 常量池就是用来保存在编译阶段确定好了大小的数据 一般我们定义的int等基本数据类型就保存在这里         其具体的一个流程就是 编译器首先检查常量池 看看有没有一个 string 如果没有则创建 如果有的话 则则直接把str 指向那个位置         第二种创建字符串的方法是通过new关键字 还是java的内存分配 java会将new的对象放在堆中 这一部分对象是在运行时创建的对象 所以我们每一次new的时候 都会创建不同的对象 即便是堆中已经有了一个一模一样的         写一个小例子  

  

       这个的运行结果是        true //解释 两个字符串的内容完全相同 因而指向常量池中的同一个区域        false //解释 每一次new都会创建一个新的对象        false // 解释 注意==比较的是地址 不仅仅是内容        true //介绍一下intern方法 这个方法会返回一个字符串在常量池中的一个地址 如果常量池中有与str 内容相同的string则返回那个地址 如果没有 则在常量池中创建一个string后再返回 实际上 str 现在指向了str 的地址         这就是让人纠结的string了 现在你可以说话了…很多人有这样的疑问就是既然string是不变的 那么为什么str + some 是合法的 其实 每次对string进行修改 都会创建一个新的对象         所以如果需要对一个字符串不断的修改的话 效率是非常的低的 因为堆的好处是可以动态的增加空间 劣势就是分配新的空间消耗是很大的 比如我们看下面的测试    

  

     我的机器上运行结果是the run time is ms 如果你把循环的次数后面再增加几个 就会更慢 因为每一次循环都在创建心的对象 那么JDK如何解决这个问题?        下面就要说第二个类StringBuffer         StringBuffer是一个线程安全的 就是多线程访问的可靠保证 最重要的是他是可变的 也就是说我们要操作一个经常变化的字符串 可以使用这个类 基本的方法就是append(与string的concat方法对应)和insert方法 至于怎么使用 就不多讲了 大家可以自己查看API    

  

     测试一下 这次只需要 ms 这就是效率         那么接下来 就要问StringBuilder是干什么的 其实这个才是我们尝使用的 这个就是在jdk 版本后面添加的新的类 前面说StringBuffer是线程同步的 那么很多情况下 我们只是使用一个线程 那个同步势必带来一个效率的问题 StringBuilder就是StringBuffer的非线程同步的版本 二者的方法差不多 只是一个线程安全(适用于多线程)一个没有线程安全(适用于单线程)         其实看了一下jdk源代码就会发现 StringBuffer就是在各个方法上加上了关键字syncronized         以上就是对三个字符串类的一个总结 总之不要在这上面纠结……不想介绍太多的方法 总觉得那样会把一篇博客弄成API文档一样 而且还非常的繁琐 都是些体会 希望有所帮助 起码不要再纠结 尤其是面试… cha138/Article/program/Java/ky/201311/28892

相关参考

知识大全 java.lang.String类运算符重载

java.lang.String类运算符重载  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Gi

知识大全 全面解析Java中的String数据类型

全面解析Java中的String数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先Str

知识大全 Java String中的HashCode和equal

JavaString中的HashCode和equal  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Java当中的String数据类型

Java当中的String数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  java中St

知识大全 深入了解Java的String

深入了解Java的String  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一从根本上认识ja

知识大全 java中String的一些方法深入解析

java中String的一些方法深入解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对ja

知识大全 JAVA对象转为Java String的几种常用方法

JAVA对象转为JavaString的几种常用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 用Java写出一段string和stringbuffer的代码

用Java写出一段string和stringbuffer的代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 Java对String字符串对象的创建以及管理

Java对String字符串对象的创建以及管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C

知识大全 Java中的两类异常

Java中的两类异常  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java提供了两类主要的异常