gpt4 book ai didi

java - 为什么Java中的String是不可变的?

转载 作者:行者123 更新时间:2023-12-01 23:27:02 24 4
gpt4 key购买 nike

在一次采访中有人问我为什么 String 是不可变的

我是这样回答的:

When we create a string in Java like String s1="hello"; then anobject will be created in string pool(hello) and s1 will bepointing to hello. Now if again we do String s2="hello"; thenanother object will not be created, but s2 will point to hellobecause JVM will first check if the same object is present instring pool or not. If not present, then only a new one is created, else not.

现在,如果假设Java允许字符串可变,那么如果我们将s1更改为hello world,那么s2值也将是hello world 所以 Java 字符串是不可变的。

我的答案是对还是错?

最佳答案

String 是不可变的有几个原因,这里是一个总结:

  • 安全性:参数通常在网络连接、数据库连接 URL、用户名/密码等中表示为字符串。如果它是可变的,则可以轻松更改这些参数。
  • 同步和并发:自动使 String 不可变使它们成为线程安全的,从而解决同步问题。
  • 缓存:当编译器优化您的 String 对象时,它会发现如果两个对象具有相同的值(a="test"和 b="test"),因此您只需要一个字符串对象(对于a和b来说,这两个都将指向同一个对象)。
  • 类加载:String用作类加载的参数。如果可变,可能会导致加载错误的类(因为可变对象会更改其状态)。

话虽这么说,String 的不变性仅意味着您无法使用其公共(public) API 更改它。事实上,您可以使用反射绕过普通 API。查看答案here

在您的示例中,如果 String 是可变的,则考虑以下示例:

  String a="stack";
System.out.println(a);//prints stack
a.setValue("overflow");
System.out.println(a);//if mutable it would print overflow

关于java - 为什么Java中的String是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58304007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com