一、String概述

String被声明为final,因为它不可被继承。

内部使用char数组存储数据,该数组被声明为final,这意味着value数组初始化之后就不能再引用其他数组。并且String没有改变value数组的方法,因此可以保证String不可变。

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];

二、String不可变的好处

1、便于实现String常量池

只有当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么String interning将不能实现(译者注:String interning是指对不同的字符串仅仅只保存一个,即不会保存多个相同的字符串。),因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变。

2、可以缓存hash值

String不可变的特性可以使得hash值也不可变,所以在它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象。这就是HashMap中的键往往都使用字符串。

3、安全性

String经常作为参数,String不可变性可以保证参数不可变。例如在作为网络连接参数的情况下,如果String是可变的,那么在网络连接过程中,String被改变,改变String对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。

4、线程安全

String不可变性天生具备线程安全,可以在多个线程中安全的使用。

三、String,StringBuffer和StringBuilder

1、可变性

  • String不可变
  • StringBuffer和StringBuilder可变

2、线程安全

  • String不可变,因此是线程安全的
  • StringBuilder不是线程安全的
  • StringBuffer是线程安全的,内部使用synchronized来同步

四、String的intern方法

String 类型的常量池比较特殊。它的主要使用方法有两种:

1、String s = “abc”创建出来的 String 对象会直接存储在常量池中

2、String s = new String(“abc”)创建了两个对象,第一个是常量池中的“abc”字符串对象(当前常量池中还没有”abc”时才会新建一个),第二个是JAVA堆中的 String 对象。

String 的 intern() 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中,但是在jdk7之后,如果堆中存在该字符串而常量池中不存在,则放入常量池的是指向堆中该字符串的一个引用(https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html)

Java基础:(二)String字符串的更多相关文章

  1. java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)

    一.String字符串 问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 class Demo17 { ...

  2. Java基础-处理json字符串解析案例

    Java基础-处理json字符串解析案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible ...

  3. Java面试题总结之Java基础(二)

    Java面试题总结之Java基础(二) 1.写clone()方法时,通常都有一行代码,是什么? 答:super.clone(),他负责产生正确大小的空间,并逐位复制. 2.GC 是什么? 为什么要有G ...

  4. Java基础之String、StringBuffer、StringBuilder浅析

    Java基础之String.StringBuffer.StringBuilder浅析 一.前言: 位于java.lang包下的String.StringBuilder.StringBuffer一般都是 ...

  5. Java入土--Java基础(二)

    Java基础(二) 接上一讲,我们接着来聊聊Java的一些基础知识,下一讲就会进行流程的控制. 类型转换 首先呢,是类型的转换,接上一个内容的数据类型,类型转换就是数据类型更进一步的应用. 由于Jav ...

  6. Redis学习系列二之.Net开发环境搭建及基础数据结构String字符串

    一.简介 Redis有5种基本数据结构,分别是string.list(列表).hash(字典).set(集合).zset(有序集合),这是必须掌握的5种基本数据结构.注意Redis作为一个键值对缓存系 ...

  7. java基础(六)-----String性质深入解析

    本文将讲解String的几个性质. 一.String的不可变性 对于初学者来说,很容易误认为String对象是可以改变的,特别是+链接时,对象似乎真的改变了.然而,String对象一经创建就不可以修改 ...

  8. 【Java基础】String 相关知识点总结

    String 相关知识点总结 字符串的不可变性 概述 String 被声明为 final,因此它不可继承 在 Java8 中,String 内部使用 char 数组存储数据 public final ...

  9. Java基础之String中equals,声明方式,等大总结

    无论你是一个编程新手还是老手,提到String你肯定感觉特别熟悉,因为String类我们在学习java基础的时候就已经学过,但是String类型有我们想象的那么简单吗?其实不然,String类型的知识 ...

  10. java基础之 string

    一 string public final class String 继承自java.lang.Object类. 实现了接口: java.io.Serializable, Comparable< ...

随机推荐

  1. python爬虫知识点总结(五)正则表达式

    在线正则表达式匹配:http://tool.oschina.net/regex 正则表达式学习:https://c.runoob.com/front-end/854 一.什么是正则表达式? 常见匹配模 ...

  2. Maven项目实战(1)

    一.maven的好处? 同样的项目使用maven工程来实现,它的项目源码很小: 1.依赖管理 就是对jar 包管理的过程 2.项目的一键构建 (编译-----测试----- 运行 --打包------ ...

  3. git repo

  4. 从0起步 BI 第一课

    收集 BI 学习资料(了解,书籍,示例demo) 专业人士: http://www.cnblogs.com/aspnetx/p/3189029.html http://www.flybi.net/ h ...

  5. CF-828C

    C. String Reconstruction time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  6. jsonp的使用方法

    参数jsonp 和 jsonpCallback jsonp指定使用哪个名字将回调函数传给服务端,也就是在服务端通过 request.getParameter(""); 的那个名字, ...

  7. 在GridView的RowDataBound事件中获取某行某列的值!

    protected void gdvOrders_RowDataBound(object sender, GridViewRowEventArgs e)   {               if (e ...

  8. 最优化理论-Simplex线性规划

     Sorry,各位,现在这里面啥也没,之所以开这篇文章,是防止以后用得到:现在研究这些,总感觉有些不合适,本人还不到那个层次:如果之后有机会继续研究simplex-线性规划问题,再回来参考下面的链接进 ...

  9. qsc52(三角形线性插值)

    题目链接:http://qscoj.cn/problem/52/ 题意:中文题诶- 思路:水题,只要知道三角形插值和判断点在三角形内就OK了 关于三角形插值:http://www.cnblogs.co ...

  10. Jmeter接口自动化参数化 (转自软件测试部落)

    测试场景: 有个查询城市(大概一百个 )天气预报的接口(需求参考第一课),需要根据不同的citycode,去查询对应城市的天气预报,这种接口该如何去测试呢? 分析需求: 不管是功能测试需求,还是接口测 ...