为什么Java中字符串不可变被设计成不可变的

Sting的几个概念:
1.String类是final类不能被继承,并且它的成员方法默认为fianl方法
3.String对象一旦被创建就不可改变相关的任何change操作都会生成一个新的对象
4.使用String不一定会创建新的对象

String为什么鈈可变:
1.常量池思想:字符串不可变常量池的需要,若允许改变那么将会引起各种逻辑错误,例如 String s1 = "abcd"; String s2 = "abcd"; s1,s2都指向常量池中的同一个字符串不可變如果改变s1那么s2的逻辑也会跟着改变

3.安全性:String被许多的库(类)用作参数,例如网络连接URL文件路径等

  • 1. Java基础部分 基础部分的顺序:基本語法,类相关的语法内部类的语法,继承相关的语法异常的语法,线程的语...

  • 注:都是在百度搜索整理的答案如有侵权和错误,希告知更改 一、哪些情况下的对象会被垃圾回收机制处理掉 ?当对象对...

  • 集合框架: 1)特点:存储对象;长度可变;存储对象的类型可不同2)Collection(1)List:有序的;元素...

为什么不可变回答这个问题,伱就要理解把它设计为不可变的好处String作为java中最常用的一种类,提供了很多操作方法把它设计为final有以下好处:

1:稳定性和节省内存开销

final型會在jvm进行类加载的时候就直接进行实例化,这样就节省以后去不断new带来的内存开辟成本了实例化后固定不可变了,这样它就是很稳定的java程序员每天都在使用String,如果String不稳定你想java最基本的操作还能实现吗?

final是无法被继承的这样它是独立存在的,自身封装的很好就不会囿子类去修改它本身的方法,不会有外界来打扰它自身结构也不会被篡改了。

这和它不能被继承这个息息相关没有任何类可以继承它,就不会暴露给外部访问它内部方法的机会这样它自身就比较安全了。

当然还有很多好处了java设计者这样做的根本目的就是为了保证java体系基本类的稳固和安全。

你对这个回答的评价是

做真实的自己 用良心做教育

千锋教育专注HTML5前端、Java开发、Python全栈、UI设计、物联网嵌入式、区塊链、大数据、人工智能、软件测试、PHP、云计算、信息安全、Unity游戏开发、红帽RHCE认证培训服务

为不可变对象,一旦被创建,就不能修改它的值.

对於已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.

你对这个回答的评价是?

string是封装类final类,不是最基本的数据类型不可变

你对这个回答的评价是?

1. 字符串不可变常量池的需要

字符串不可变常量池(String pool, String intern pool, String保留池) 是Java堆内存中一个特殊的存储区域, 当创建一个String对象时,假如此字符串不可变值已经存在于常量池中,则不会创建一个新的對象,而是引用已经存在的对象假若字符串不可变对象允许改变,那么将会导致各种逻辑错误,比如改变一个对象会影响到另一个独立对象. 严格来说,这种常量池的思想,是一种优化手段.

Java中String对象的哈希码被频繁地使用, 比如在hashMap 等容器中字符串不可变不变性保证了hash码的唯一性,因此可鉯放心地进行缓存.这也是一种性能优化手段,意味着不必每次都去计算新的哈希码.

String被许多的Java类(库)用来当做参数,例如 网络连接地址URL,文件路径path,还囿反射机制所需要的String参数等, 假若String不是固定不变的,将会引起各种安全隐患。

 总体来说, String不可变的原因包括 设计考虑,效率优化问题,以及安全性这彡大方面. 事实上,这也是Java面试中的许多 "为什么" 的答案

我要回帖

更多关于 字符串不可变 的文章

 

随机推荐