一、String的解析
1.String的含义
①String是不可以被继承的,String类是final类,String类是由char[]数组来存储字符串。
②String是不可变的字符序列,如果存储abc则在字符串常量池中开辟长度固定为3的字符数组,无论怎么改变均会产生新的实例。

2.String的方法

由上图可知String的方法,不是在原有字符串的基础上进行修改的,都是new出了新的实例,因为String是不可变的字符序列。Sring对象的任何改变都不会改变原有的字符串。

二、字符串常量池的概念
1.String c = “abc” String cc = new String(“abc”)在内存中分布情况?

①Sting c = “abc” 先在字符串常量池中查找,如果常量池中没有,就实例化该字符串,并放到常量池中;如果池中存在abc,直接将字符串的地址赋值给c,c指向常量池的abc。
②String cc = new String(“abc”) 先在字符串常量池中找abc,如果存在再在堆中开辟一个空间指向常量池中的abc,栈中的cc指向堆中的0x12.
③一共开辟了4块内存空间,String cc = new String(“abc”)如果池子中有abc则,创建一个对象,如果池子中没有abc则创建2个对象。
④String cc = new String (“dec”) 的执行顺序是先从右向左。先判断dec在常量池中是否存在。如果不存在实例化一个放入池子中,再new堆中的对象。
2.分情况说明
①非new实例,结果是true,都是指向的字符串常量池中123。

②new实例,结果是false一个指向池子,一个指向堆内存,地址不一致。

③new实例2,结果是false,只要是new 出的实例在内存中就会开辟空间,二者的地址不一致,所以返回false。

④一个字符串由多个字符串拼接而成时,它本身也是字符串常量。
new出的对象不能再编译期间确定,cz02和cz03也不能再编译器确定。cz04和cz05都指向堆内存,cz04的值是在程序运行时确定的。
【常量找池,变量找堆】

⑤编译期优化,jvm将+连接优化为连接后的值,在编译期其值就是”a1”.

⑥字符串常量拼接和字符串引用的拼接,常量的”+”拼接是在编译期完成的,而字符串引用拼接(“+”),是在程序运行时确定的。一个在指向字符串常量池,一个指向堆内存。

三、String、StringBuilder、StringBuffer解析和比较
1.String简单总结
①String不可变的字符序列
②new的对象,一定是创建了对象,在堆中开辟空间。
③直接赋值和new两种方式创建String类型的对象。
④直接赋值不一定创建对象,如果字符串常量池中有的话就直接堆中的实例指向常量池中,不需要创建对象。
⑤final修饰类,不能被继承。
⑥String a = “1”+“2”+“3”+“4”;这个字符串拼接过程要产生多个对象完成,效率比较低。
2.String和StringBuilder、StringBuffer的区别?
①可变性:String不可变的字符序列,Builder和Buffer是可变的字符序列。
②线程安全:String是线程安全的,StringBuilder是线程不安全的,StringBuffer是线程安全。StringBuidler效率高于StringBuffer。因为String是不可变的一般情况下,效率最低。


③使用方式:如果字符串变换较少,使用String类型,如果拼接操作较多使用StringBuilder,如果要求线程安全使用StringBuffer。
3.StringBuffer可变字符序列的解析
①初始容量为16



②自动扩容:初始容量的2倍加2

java--String、StringBuilder、StringBuffer的解析和比较?的更多相关文章

  1. 【转载】关于Java String, StringBuilder, StringBuffer, Hashtable, HashMap的面试题

    REF: http://blog.csdn.net/fightforyourdream/article/details/15333405 题目是一道简单的小程序,像下面这样:[java] view p ...

  2. Java String StringBuilder StringBuffer

    String是字符串常量 StringBuilder和StringBuffer都是字符串变量 速度方面:StringBuilder > StringBuffer > String 每当用S ...

  3. Java - String, Stringbuilder, StringBuffer比较

    http://www.cnblogs.com/zuoxiaolong/p/lang1.html

  4. java中String StringBuilder StringBuffer比较和效率(性能)测试

    string stringbuilder stringbuffer三者的区别 从JDK源码看,String.StringBuilder.StringBuffer都是存放在char[] 数组字符串. 简 ...

  5. JAVA String、StringBuffer、StringBuilder类解读

    JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...

  6. 深入源码剖析String,StringBuilder,StringBuffer

    [String,StringBuffer,StringBulider] 深入源码剖析String,StringBuilder,StringBuffer [作者:高瑞林] [博客地址]http://ww ...

  7. String, StringBuilder, StringBuffer问题

    1. 区别 String为字符串常量,而StringBuilder和StringBuffer都是字符串变量,其中StringBuilder线程非安全,StringBuffer线程安全. 每次对 Str ...

  8. String StringBuilder StringBuffer区别

    String StringBuilder StringBuffer String类是final类,不可以被继承,且它的成员方法也是final方法,当一个字符串对象进行操作操作时,任何的改变不会影响到这 ...

  9. difference among String,StringBuilder,StringBuffer

    difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...

  10. JDK源码分析系列---String,StringBuilder,StringBuffer

    JDK源码分析系列---String,StringBuilder,StringBuffer 1.String public final class String implements java.io. ...

随机推荐

  1. Tomcat 指定jdk

    Windows 下 修改 tomcat根目录/bin/setclasspath.bat 文件 如下: rem Otherwise either JRE or JDK are fine set JAVA ...

  2. Linux 添加硬盘并分区

    Linux 添加硬盘并分区 *********************** 1.fdisk /dev/sdb 2.m   //帮助 3.p   // p 列出分区表 4.q   //不保存退出: 5. ...

  3. Spring @Import 注解

    @Import  导入某个bean 文件 @Configuration @Import({User.class,MyImportSelector.class,MyImportBeanDefinitio ...

  4. Debian 跨版本升级

    相对于某些重量级 Linux 发行版而言,同样是通过网络跨版本升级,Debian 的升级过程总要显得轻快很多.不会因为要下载数量惊人的软件包并安装而把升级时间拉得很长,也不用担心中途某些程序崩溃退出导 ...

  5. HTML——制作一个图片列表

    总结: 1)html有很多默认样式,然而实际应用中并不需要,因此要在制作样式之前清除掉默认样式. 2)注意清除margin-top塌陷 3)使用float:left后要使用clear:both清除其影 ...

  6. Ubuntu上k8s集群里创建证书

    证书: k8s里创建证书(使用证书文件命令创建): kubectl create secret tls scdsc-org-cn --cert=/etc/letsencrypt/live/scdsc. ...

  7. 078 Subsets 子集

    给定一组不同的整数 nums,返回所有可能的子集(幂集).注意事项:该解决方案集不能包含重复的子集.例如,如果 nums = [1,2,3],结果为以下答案:[  [3],  [1],  [2],  ...

  8. 063 Unique Paths II 不同路径 II

    这是“不同路径” 的进阶问题:现在考虑网格中有障碍物.那样将会有多少条不同的路径从左上角到右下角?网格中的障碍物和空位置分别用 1 和 0 来表示.例如,如下所示在 3x3 的网格中有一个障碍物.[  ...

  9. E. Selling Souvenirs 不会做

    http://codeforces.com/contest/808/problem/E 不理解为什么dp = {cost, cnt1, cnt2}可以 而dp = {cost, cnt1, cnt2, ...

  10. (转)useradd用户,组管理案例

    原文:https://www.cnblogs.com/Csir/p/6403830.html?utm_source=itdadao&utm_medium=referral 示例:要求oldbo ...