为什么字符串在Java中是不可变的?

毫无疑问,这是初学者级Java面试最多问的问题。有时您也可以面对中级面试。所以,我的建议是永远在这里学习。

让我们从不变性本身开始。一个不可变的对象哪个状态是保证在其整个寿命留相同的对象。这确实是一个很好的定义。是不是 这意味着对象的状态一旦初始化,就永远无法更改。

通常,java中的不变性是通过以下方式实现的以下步骤:

  1. 不要为任何字段提供更改方法
  2. 将所有字段定为最终私有
  3. 不允许通过声明类最终值来允许子类
  4. 返回类中所有可变字段具有复制内容的深层克隆对象
请注意,虽然无需“ final”关键字就可以实现不变性,但是它的使用 
对人类(软件开发人员)和机器(编译器)明确表明这一目的。

Java也有不可变类,主要是String类wrapper类。。在本文中,我们将了解String类不可变性的需求。

1)安全性:首要的也是最重要的原因是安全性。好吧,这不仅关系到您的应用程序,甚至关系到JDK本身。Java类加载机制对作为参数传递的类名称起作用,然后在类路径中搜索这些类。想象一分钟,字符串是可变的,那么任何人都可以轻松地注入自己的类加载机制,并在一分钟之内销毁或入侵任何应用程序。
[好吧,我认为在这种情况下,Java在今天还没有得到普及……🙂,没有人会使用它]。这意味着字符串是不可变的,这就是Java仍然存在于游戏中的原因。

2)性能:我相信不是String类的不变性赋予了它性能,而是字符串池在后台默默工作。但是同时,如果不使String类不可变,则不可能使用字符串池。因此,这又再次归结为String类的不可变性,它允许字符串池,从而提高了性能

3)线程安全性:不可变对象在多线程应用程序中的多个线程之间共享时是安全的。只是了解和学习。没有超级逻辑。如果某些内容无法更改,那么即使线程也无法更改它。

由于String类是Java编程语言的主要构建块,由于它在类加载机制中的使用,确实是防止多线程使用String类弄脏的必不可少的用例。不变性在这里神奇。

我认为其足够的理由可以满足面试官的需求。如果经过这些解释他不满意,他将永远不会满意。

学习愉快!

saigon has written 1440 articles

One thought on “为什么字符串在Java中是不可变的?

Leave a Reply