字符串String:

  封装char[] 字符数组,不可变(因为在底层代码中,值用final关键字修饰)

字符串的字面值:

  如果第一次用到一个字符串字面值,会在内存中“字符串常量池”内新建对象,当再次使用相同字面值时,
直接访问常量池中存在的实例,而不新建对象。

 public class TestString {

     public static void main(String[] args) {
char[] a = {'h','e','l','l','o'};
String s1 = new String(a); //内存中新分配内存空间
String s2 = "hello"; //在常量池新建对象
String s3 = "hello"; //访问常量池存在的对象 System.out.println(s1);
System.out.println(s2);
System.out.println(s3); System.out.println(s1 == s2); //输出false,内存地址不相等
System.out.println(s2 == s3); //输出true,内存地址相等,引用指向同一个对象 System.out.println(s1.equals(s2)); //比较字符内容
}
}

字符串连接效率:

  字符串一旦创建,字符串的内容不可变,任何对字符串修改的操作,都是在新建字符串。

  接下来采用System.currentTimeMillis()方法来观察用String拼接字符串的效率。先在拼接行为前记录当前时间,再在拼接行为后也记录一下时间,相减后即为拼接行为所花的时间。

 public class Test01 {

     public static void main(String[] args) {
String s0 = "abcdefqhijklmnopqrstuvwxyz";
String s = "";
//系统当前时间点毫秒值
//毫秒值:1970-1-1 0点开始的毫秒值
long t = System.currentTimeMillis();
for(int i=0;i<100000;i++) {
s += s0;
}
t = System.currentTimeMillis() - t;
System.out.println(t);
}
}

  输出结果为140285,拼接行为花了140285毫秒,共创建100000个对象,显然效率很低,而且十分浪费空间。

高效率字符串连接:

  StringBuilder、StringBuffer:
      封装char[]字符数组,可变。(值没有用final修饰)

  StringBuilder和StringBuffer的区别:
      StringBuilder 线程不安全,效率高;StringBuffer 线程安全,效率低。通常都是用StringBuilder

  采用StringBuilder进行字符串连接,通过在原字符数组基础上的数组扩容进行拼接,不会建立新对象,可以显著提高连接效率。

  依旧采用System.currentTimeMillis()方法来观察用StringBuilder拼接字符串的效率。

 public class Test02 {

     public static void main(String[] args) {
String s0 = "abcdefqhijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder("");
//系统当前时间点毫秒值
//毫秒值:1970-1-1 0点开始的毫秒值
long t = System.currentTimeMillis();
for(int i=0;i<100000;i++) {
sb.append(s0);
}
t = System.currentTimeMillis() - t;
System.out.println(t);
}
}

  输出结果为11,拼接行为只花了11毫秒,显然效率提高了很多很多。

Java-String字符串相关的更多相关文章

  1. Java String 字符串操作小结

    // 转载加编辑 -- 21 Apr 2014 1. Java字符串中子串的查找 Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现 ...

  2. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  3. java String字符串

      五.java数据类型之String(字符串) CreateTime--2017年7月21日16:17:45 Author:Marydon (一)数据格式 (二)初始化 // 方式一 String ...

  4. Java String 字符串类细节探秘

    一. 字符串基本知识要点 字符串类型String是Java中最常用的引用类型.我们在使用Java字符串的时候,通常会采用两种初始化的方式:1. String str = "Hello Wor ...

  5. Java String的相关性质分析

    引言 String可以说是在Java开发中必不可缺的一种类,String容易忽略的细节也很多,对String的了解程度也反映了一个Java程序员的基本功.下面就由一个面试题来引出对String的剖析. ...

  6. 面试之Java String 编码相关

    实话说,作为一个多年Java老年程序员,直到近来,在没有决心花时间搞清楚Java String的编码相关问题之前, 自己也都还是似懂非懂,一脸懵逼的.设想如果在面试中,有同学能够条理清晰的回答下面的问 ...

  7. java String字符串——进度1

    String字符串    在JAVA中提供了多种创建字符串对象的方法,这里介绍最简单的两种,    第一种是直接赋值,    第二种是使用String类的构造方法:    如下所示:    Strin ...

  8. Java String字符串深入详解

    Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "hello";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...

  9. String字符串相关操作

    .length 字符串长度.equals 比较字符串.equalIgnoreCase 比较字符串不区别大小写.charAt 获取字符串指定下标位置的字符.contains 判断字符串内是否包含某字符串 ...

  10. Java String类相关知识梳理(含字符串常量池(String Pool)知识)

    目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...

随机推荐

  1. Python: PS 图像特效 — 模糊玻璃

    今天介绍一种基于高斯滤波和邻域随机采样,生成一种毛玻璃的图像特效,简单来说,就是先对图像做高斯滤波模糊,然后对模糊后的图像,通过对邻域的随机采样来赋予当前的像素点,这样,生成的图像有有一定的随机扰动和 ...

  2. zookeeper入门到精通

  3. [ZJU 2112] Dynamic Rankings

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1901 [算法] 首先 , 考虑没有修改操作 不妨建立可持久化线段树 , 第i棵树维护 ...

  4. 简单三步快速学会使用Mybatis-Generator自动生成entity实体、dao接口以及mapper映射文件(postgre使用实例)

    前言: mybatis-generator是根据配置文件中我们配置的数据库连接参数自动连接到数据库并根据对应的数据库表自动的生成与之对应mapper映射(比如增删改查,选择性增删改查等等简单语句)文件 ...

  5. 注册页面Page的内置属性以及函数 路由 模块化

    Page.prototype.route  route字段可以获取到当前页面的路径 Page.prototype.setData() setData函数用于将数据从逻辑层发送到视图层,同时改变对应的t ...

  6. tabbar

    1 tabbar不显示的问题: 命名在app.json中配置了tabbar但是不显示可能的问题: app.json中的pages中第一个路径没有在tabbar中设置 原因:app.json中配置的pa ...

  7. KVM虚拟机内无agent情况下的监控方法

    KVM虚拟机内无agent情况下的监控(ceilometer实现) 今天看到大家在群里讨论KVM虚拟机的监控问题,而且是要求VM内无agent情况下的监控.这方面确实没有深入研究,但尚有些openst ...

  8. 解决在IE11浏览器上,css样式不起作用的问题

    1.首先下载http://pan.baidu.com/s/1c1DA1Ew并运行; 2.在列表中找到.css双击出现Edit File Type; 3.将MIME Type中改为text/css,点击 ...

  9. dumpbin检查Dll

    用dumpbin.exe工具查看DLL,dumpbin.exe是VS自带的工具.版本VS2013,路径是:G:\VS2013\VC\bin\amd64\ 可以看到dumpbin.exe. 使用VS里的 ...

  10. java8--List转为Map、分组、过滤、求和等操作

    利用java8新特性,可以用简洁高效的代码来实现一些数据处理~ 定义1个Apple对象: public class Apple { private Integer id; private String ...