Java中的String和StringBuilder类:

1.String对象是不可变的。每一个看起来修改了String值的方法,实际上都是创建了全新的String对象。代码示例如下:

String str12="abc";
str12.toUpperCase();
System.out.println(str12);

上面程序输出结果为 abc

 str12.toUpperCase();该方法是将str12大写,但实际上是给大写之后的字符串重新开辟了空间,丝毫不会影响str12的值。

在计算机的程序设计中,对字符串的操作是非常频繁的。为了提高效率,不会为每一个字符串都开辟空间。相当于一个“拘留池”,创建的字符串变量都存储在拘留池中,当有新的String变量时,jdk会先判断
一下,拘留池中是否已经存在该字符串。如果有,直接将变量的引用指向该字符串,如果没有才会去开辟空间。
注意:
这个拘留池效应,只针对非new出来的字符串,如果是String str=new String("abc");那么不管拘留池中是否已经存在“abc”这个字符串,都会给重新开辟空间。因为这个语句的执行顺序是:先为abc开辟
一个空间,然后再将str这个引用指向这个空间。

2.我们在程序中经常会写

System.out.println("a"+1+"b");

这里深入讲解一下,重载操作符“+”;

1.println()是将括号内的值转换成string字符串,然后输出的。其实就是去调用toString()方法。

2.当有"+"这个重载操作符的时候,编译器会自动创建StringBuilder对象来处理括号内的字符串操作。

  这里稍微分析下,为什么编译器会这么干:因为String是不可变的,当我们每次给字符串“a”连接一个字符串“b”的时候,必然需要重新开辟一个新的空间,然后将值copy进去。效率低,还会产生需要垃圾回收的一系列对象。因此这里最好使用可变的StringBuilder对象来处理。

3.这里介绍下StringBuilder:

  它是可变的,当需要增加某个字符串长度的时候,直接append就可以了。

  当使用StringBuilder str=new StringBuilder()这个无参构造函数来创建StringBuilder对象的时候,会默认创建长度为16的char[]类型的数组。当你调用append()方法追加的字符串长度大于16的时候(str.length=19),就会需要重新开辟空间。此时内部会将value的值左移+2(如当前是16,二级制是10000,左移之后就是100000(对应10进制数是32),32+2=34),比较value左移+2的值与当前字符串长度与新追加的字符串长度之和,谁的值比较大就取这个大的值去开辟相应的空间长度。

  因为默认开辟的空间只有16个字符大小,在我们还用StringBuilder对象的时候,如果超出这个长度就需要重新开辟空间,就失去了StringBuilder的优势。所以,当我们可以大致确定所需要的字符串长度时,建议使用StringBuilder(XXX)这个构造函数,用来减少重新分配的次数,提升性能。

自动化测试学习之路--java String、StringBuilder的更多相关文章

  1. 自动化测试学习之路--java 数组

    数组的定义与为数组元素分配空间和赋值是分开进行的,称为动态初始化. 在数组定义的同时就为数组元素分配空间并赋值,称为静态初始化. 一维数组举例: //动态初始化 int[] intArr; intAr ...

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

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

  3. Java JDK1.8源码学习之路 2 String

    写在最前 String 作为我们最常使用的一个Java类,注意,它是一个引用类型,不是基本类型,并且是一个不可变对象,一旦定义 不再改变 经常会定义一段代码: String temp = " ...

  4. 我的java学习之路--Java注解专题

    学习网址:http://www.imooc.com/video/8861 1.引言 2.Java中的常见注解 JDK自带注解:<br>@Override @Deprecated @Supp ...

  5. Android开发学习之路--Java和Js互相调用

      随着前端的火热,以前开发的快速,越来越多的native app在其中融合了h5,就拿淘宝就是很多的h5组成的,一旦出现什么节日,他都可以不用通过更新app来实现界面的改变,而且android和io ...

  6. java String,StringBuilder和StringBuffer

    String:1.java语言中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但java一般使用Sting类作为字符串的标准格式,java编译器把字符串值作为String对象. ...

  7. 自动化测试学习之路--json、dom编程

    1.json: json是JavaScript Object Notation,是一种数据传输格式. 以下程序都是在浏览器的Console下执行的. 创建一个javaScript的对象: var st ...

  8. 我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑

    又是一道面试题,来测试你的Java基础是否牢固. 题目:以下代码的运行结果是? public class TestValue { public static void test(String str) ...

  9. Java学习之路 -- Java怎么学?

    @ 目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...

随机推荐

  1. Android学习笔记_65_登录功能本身没有任何特别

    对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可.但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cooki ...

  2. swiper插件使用技巧

    1.加载插件: <!DOCTYPE html> <html> <head> ... <link rel="stylesheet" href ...

  3. File zilla远程连接服务器报错:服务器发回了不可路由的地址,使用服务器地址代替

    百度的答案都是:更改Filezilla设置,编辑-设置-连接-FTP-被动模式,将“使用服务器的外部ip地址来代替”改为“回到主动模式”即可.但问题没有解决!!! 由于使用的是阿里云的服务器.安全组里 ...

  4. c# 分析SQL语句中的表操作

    最近写了很多方向的总结和demo.基本包含了工作中的很多方面,毕竟c#已经高度封装并且提供了很多类库.前面已经总结了博文.最近2天突然感觉前面的SQL分析阻组件的确麻烦,也注意看了下.为了方便大家学习 ...

  5. swiper不能手指滑动翻页的解决办法

    /*当swiper中的slide的里面放入长度在手机上不能滑动的时候 放入这段代码就可以了*/    var startScroll, touchStart, touchCurrent;        ...

  6. LeetCode 中级 - 翻转矩阵后的得分(861)

    有一个二维矩阵 A 其中每个元素的值为 0 或 1 . 移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0. 在做出任意次数的移动后,将该矩阵的每一 ...

  7. python selenuim如何判断下拉框是否加载出来,超过时间不再等待

    s_flag = True time_start = time.time() while s_flag: doc = etree.HTML(unicode.encode(driver.page_sou ...

  8. .Net Core On Liunx 环境搭建之安装Mysql8

    上一篇文章安装了MongoDB紧接上一篇随笔,来进行MySql数据库的安装 服务器环境:阿里云云服务器,操作系统CentOS.7-x64 注:文章的图片是我从我的CSDN博客中直接粘贴过来的,不是扒的 ...

  9. 出现java.lang.NoSuchMethodError错误的原因

    作为Java开发者我们都遇到过java.lang.NoSuchMethodError错误,究其根源,是JVM的"双亲委托模型"引发的问题.如果在类路径下放置了多个不同版本的类包,如 ...

  10. php-7.2.3源代码和php-5.6.26源代码摘录,对比 “汇编php文件”和“执行opcode代码”

    php-7.2.3 在“汇编php文件”和“执行opcode代码”上做了大量改变php-5.6.26 没见到支持抽象语法树的相关代码,php-7.2.3 见到支持抽象语法树的相关代码php-5.6.2 ...