「java字符串不可变」java字符串为什么不可变

博主:adminadmin 2023-03-20 03:05:06 458

本篇文章给大家谈谈java字符串不可变,以及java字符串为什么不可变对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

在Java中字符串的内容可以部分改变吗

不可改变,原因是字符串变量是存放栈内存中的,而其所对应的字符串是存放在堆内存中的。某个字符串变量一旦赋值,实际上就是在栈内存中的这个字符串变量通过内存地址指向到堆内存中的某个字符串。而如果这个字符串变量所对应的字符串发生改变,在堆内存中就会新款开辟一块空间出来存放这新字符串,并使得原先的内存地址指向发生改变。而之前的字符串如果没有其他字符串变量所指向,那么就会变成垃圾,等待回收机制将它从堆内存中清走。值得注意的是,无论对字符串变量进行重新赋值、截取、追加等操作其实改变的都不是字符串本身,而是指向该字符串的内存地址。

Java的String对象不能改变?

public final class String

说String不参改变是指它的定义,是final的,不能被继承,方法不能被重写。

不是说这个对象的引用不可改变。

java中string为什么不可变

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

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

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

2:防篡改

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

3:安全性:

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

4:方便jvm优化

比如:String str1=“a"+"b"+1; String str2="ab1";为final的话,jvm就可以很方便的把str1的内容优化为str2,并指向同一个引用。这样就不用再去内存中new了。

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

关于java字符串不可变和java字符串为什么不可变的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。