一、java内部String类的实现:

java 8:

public final class String

implements java.io.Serializable, Comparable, CharSequence {

/** The value is used for character storage. */

private final char value[];

}

java 9 及之后:(使用coder标识了编码)

public final class String

implements java.io.Serializable, Comparable, CharSequence {

/** The value is used for character storage. */

private final byte[] value;

/** The identifier of the encoding used to encode the bytes in

{@code value}. */

private final byte coder;

}

二、为何要将String定义为final不可变?

因为在程序编写的过程中,会大量地用到String常量,如果每次声明一个String引用都要新建一个String对象,那么会造成空间的极大浪费。于是,在java的堆中开辟了一块存储空间String pool,用于存储String常量对象。当有多个String引用指向同样的String字符串时,实际上是指向的是同一个Sting pool中的对象,而不需要额外的创建对象。

public class Test{

public static void main(String [] args){

String a="abc";

String b="abc";//对象保存在string pool中

String c=new String("abc");//以new创建的对象保存在堆中

System.out.println("a==b:"+(a==b));

System.out.println("a==c:"+(a==c));

}

}

实现String pool就需要String定义为final,否则,当引用a、b都指向“abc”时,通过a将对象改变后,引用b所指向的对象被动地改变了。那程序员不得气得半死?

三、String不可变的其他好处

1、以String作为HashMap的key,String的不可变保证了hash值的不可变。

2、String作为网络连接的参数,它的不可变性提供了安全性。

3、String不可变,所以线程安全。

以上所述是小编给大家介绍的java String不可变的好处详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

java string的作用_浅谈java String不可变的好处相关推荐

  1. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  2. java编程double相乘_浅谈Java double 相乘的结果偏差小问题

    看下面的一段代码的运行结果: public class TestDouble { public static void main(String[] args) { double d =538.8; S ...

  3. java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法

    在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...

  4. java null什么意思_浅谈java中null是什么,以及使用中要注意的事项

    1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...

  5. java 对象之间转换_浅谈java对象之间相互转化的多种方式

    浅谈java对象之间相互转化的多种方式,对象,属性,参数,赋值,不支持 浅谈java对象之间相互转化的多种方式 易采站长站,站长之家为您整理了浅谈java对象之间相互转化的多种方式的相关内容. 第一种 ...

  6. java定义byte数组_浅谈java的byte数组的不同写法

    (由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是&qu ...

  7. java 中的排序_浅谈java中常见的排序

    浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...

  8. java 监听器作用_浅谈java监听器的作用

    监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特 ...

  9. java变量命名规则_浅谈JAVA开发规范与开发细节(上)

    开发团队在开发过程中,由于每个人的开发习惯,以及对于技术的理解深浅程度不一,往往一个项目在开发过程中,代码的质量,代码的风格都不尽相似,所以有一份适合团队的代码规范是非常有必要的,而一个团队的代码规范 ...

最新文章

  1. Ubuntu 18 系统安装教程
  2. 学完UI设计可以从事哪些工作
  3. 深入分析Java的序列化与反序列化
  4. Linux内核源码树建立加载hello模块
  5. 每小时的数据mysql_荐 mysql查询每小时数据和上小时数据的差值
  6. 谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!
  7. highCharts使用中问题总结
  8. python中astr是啥_python的基本操作
  9. 11g java 驱动_Oracle 11g Java驱动包ojdbc6.jar安装到maven库,并查看jar具体版本号
  10. py2exe打包pyqt程序
  11. signature=7a6addc49a87cb6a44a8da5a20a59d1f,Disks and Halos in Pre-Main-Sequence Stars
  12. reconnecting-websocket.min.js
  13. 闽江学院2015-2016学年下学期《软件测试》课程-第四次博客作业
  14. Atitit 提升战力眼光和组织能力的几大要点 目录 1. 成长金字塔模型 德雷福斯模型 1 2. 提升战略眼光, 3 2.1. 视野与格局 3 2.2. 未来预测 未来发展负责,判断未来趋势, 3
  15. SpringBoot RestTemplate 发送请求 忽略证书不安全
  16. 董事局主席董事长总裁首席执行官CEO总裁董事监事区别
  17. BLE设备地址类型笔记
  18. 【刷题】微软高频题总结
  19. unity中射线碰撞检测总结
  20. 基于51单片机的篮球计分器

热门文章

  1. mysql与oracle链接超时_数据库连接超时问题(求解)
  2. 计算机组装与维护思考问题,计算机组装与维护中的常见问题及解决方法
  3. 2018年计算机CPU纳米制程,联发科疯狂堆核计划曝光:7纳米制程,12核CPU
  4. 工作流Flowable实战篇
  5. 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02
  6. node+express创建第一个node项目
  7. mysql性能调优之配置优化_MySQL优化必须调整的10项配置
  8. qt获取场景的缩略图
  9. BugkuCTF-MISC题蜘蛛侠
  10. 斯皮尔 皮尔森 肯德尔_一起来学应用统计学(全部)(二)持续更新