java string的作用_浅谈java String不可变的好处
一、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不可变的好处相关推荐
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- java编程double相乘_浅谈Java double 相乘的结果偏差小问题
看下面的一段代码的运行结果: public class TestDouble { public static void main(String[] args) { double d =538.8; S ...
- java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法
在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...
- java null什么意思_浅谈java中null是什么,以及使用中要注意的事项
1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...
- java 对象之间转换_浅谈java对象之间相互转化的多种方式
浅谈java对象之间相互转化的多种方式,对象,属性,参数,赋值,不支持 浅谈java对象之间相互转化的多种方式 易采站长站,站长之家为您整理了浅谈java对象之间相互转化的多种方式的相关内容. 第一种 ...
- java定义byte数组_浅谈java的byte数组的不同写法
(由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是&qu ...
- java 中的排序_浅谈java中常见的排序
浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...
- java 监听器作用_浅谈java监听器的作用
监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特 ...
- java变量命名规则_浅谈JAVA开发规范与开发细节(上)
开发团队在开发过程中,由于每个人的开发习惯,以及对于技术的理解深浅程度不一,往往一个项目在开发过程中,代码的质量,代码的风格都不尽相似,所以有一份适合团队的代码规范是非常有必要的,而一个团队的代码规范 ...
最新文章
- Ubuntu 18 系统安装教程
- 学完UI设计可以从事哪些工作
- 深入分析Java的序列化与反序列化
- Linux内核源码树建立加载hello模块
- 每小时的数据mysql_荐 mysql查询每小时数据和上小时数据的差值
- 谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!
- highCharts使用中问题总结
- python中astr是啥_python的基本操作
- 11g java 驱动_Oracle 11g Java驱动包ojdbc6.jar安装到maven库,并查看jar具体版本号
- py2exe打包pyqt程序
- signature=7a6addc49a87cb6a44a8da5a20a59d1f,Disks and Halos in Pre-Main-Sequence Stars
- reconnecting-websocket.min.js
- 闽江学院2015-2016学年下学期《软件测试》课程-第四次博客作业
- Atitit 提升战力眼光和组织能力的几大要点 目录 1. 成长金字塔模型 德雷福斯模型	1 2. 提升战略眼光,	3 2.1. 视野与格局	3 2.2. 未来预测 未来发展负责,判断未来趋势,	3
- SpringBoot RestTemplate 发送请求 忽略证书不安全
- 董事局主席董事长总裁首席执行官CEO总裁董事监事区别
- BLE设备地址类型笔记
- 【刷题】微软高频题总结
- unity中射线碰撞检测总结
- 基于51单片机的篮球计分器
热门文章
- mysql与oracle链接超时_数据库连接超时问题(求解)
- 计算机组装与维护思考问题,计算机组装与维护中的常见问题及解决方法
- 2018年计算机CPU纳米制程,联发科疯狂堆核计划曝光:7纳米制程,12核CPU
- 工作流Flowable实战篇
- 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02
- node+express创建第一个node项目
- mysql性能调优之配置优化_MySQL优化必须调整的10项配置
- qt获取场景的缩略图
- BugkuCTF-MISC题蜘蛛侠
- 斯皮尔 皮尔森 肯德尔_一起来学应用统计学(全部)(二)持续更新