但究竟是为什么要这么做呢?
如果考虑是如何将
String
的对象变得
immutable
,可以查看
java
src
,因为
String
类的成员变量
value
,一个
char
数组,是
final
类型,一旦初始化后将无法更改。
多数的时候解释为,考虑到执行效率上,因为如果一个
String
实例创建后,比如,
”abc”
,可以被多个
String
对象引用,以减少创建的对时间和资源的消耗(
可以参考这里
获取一些有关
String pool的信息)
,不过今天看到另一种说法,是安全?!
假设,有两个用户,
user1
,
user2
,分别对应两个属于其个人的隐私文件,
file1
,
file2
。两人只能访问其对应的文件,即,
user1
对应
file1
,
user2
对应
file2
。
如果
String
是可以更改的,那么也就是
File
类型引用的
String
path
就是一个可以更改的值。试想,
user1
登陆以后,在试图打开其个人隐私文件之前,这个
path
对象的
value
被更改了,改成了
file2
,那
user1
在试图开启其个人隐私文件时,看到的就是
file2
的内容。
这只是对如果
String
是可更改的简单假象,更多的复杂的场景可以考虑,比如多线程的操作。
分享到:
相关推荐
"String型的不可变性" Java 中的 String 型是一个特殊的包装类数据,它具有不可变性。什么是不可变性呢?简单来说,就是 String 对象一旦被创建,不能被修改。那么,为什么 String 对象不能被修改呢?这就需要从 ...
在Java编程语言中,String对象被认为是不可变的。这个特性是Java设计者为了优化性能、安全性和线程安全性而有意设定的。理解String对象的不可变性对于Java开发者来说至关重要,因为它影响着代码的编写、内存管理和多...
6. **String是不可变的**: `String`类的对象一旦创建,其内容就不能更改。每次对`String`对象进行修改操作(如`concat()`、`substring()`等),都会生成新的`String`对象。 7. **垃圾回收与String对象**: 如果...
`String`类是不可变的(immutable),这意味着一旦一个`String`对象被创建,它的内容就不能被改变。这种特性使得`String`类非常适合在多线程环境中使用,因为不需要担心其内容被多个线程同时修改。 #### 二、String...
尽管如此,`String` 类拥有其独特之处,比如它是不可变的(final),这保证了字符串一旦创建便不能更改其内容。 **常量池(Constant Pool)**:在 Java 编译阶段确定的数据集合,存储在 `.class` 文件中。它包含了类...
1. **线程安全**:由于String对象不可变,所以在多线程环境中,多个线程可以安全地共享同一个String对象,无需担心同步问题。这提高了程序的并发性能。 2. **缓存哈希码**:String对象经常用于HashMap等数据结构中...
- `String`对象是不可变的,这意味着一旦创建,其内容就不能更改。这与`StringBuilder`或`StringBuffer`类的可变字符串不同。 - 直接通过字面量创建的`String`对象,如`"a"`,会存储在字符串池(String Pool)中。...
在Java编程语言中,String类是一个非常特殊且重要的类,它是不可变的。这个特性意味着一旦创建了一个String对象,它的值就不能被改变。这个设计决策背后有多种原因,包括性能、安全性和线程安全性。 首先,理解...
字符串在JavaScript中是一种不可变的数据类型,这意味着一旦创建,就不能更改其内容。尽管如此,String对象提供了丰富的内置方法来处理字符串的各种需求,包括查找、替换、连接、格式化以及提取子字符串等。 首先,...
3. **线程安全**:由于`String`对象不可变,它们在多线程环境下可以安全地共享,无需额外的同步措施。这是Java设计者为了提高安全性及并发性能所做的决策。 4. **字符串池**:Java使用字符串池来存储常量字符串,以...
String对象不可变,无法修改 ``` 这段代码是错误的,因为 `String` 对象的字符内容是不可变的,不能通过 `charAt` 或其他方法直接修改其内容。 ##### (3) 举例3 利用 `StringBuilder` 或 `StringBuffer` 修改字符...
在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类...
`String`在Java中被设计为不可变对象,意味着一旦创建了一个`String`对象,其内容就不能被更改。如果尝试修改`String`的内容,实际上是在内存中创建一个新的`String`对象来存储新的内容。这一特性确保了`String`对象...
Java中的String类是不可变的,这意味着一旦创建了一个String对象,就不能改变它的内容。这个特性是由几个关键的设计决策和语言特性共同决定的。首先,String类被声明为final,这防止了其他类对其进行子类化并改变其...
String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一个新的 String 对象,然后将指针指向新的 String 对象。这意味着,如果经常改变字符串内容,最好不要使用 String 类型,因为每次生成对象都会对...
- **野指针问题**:`memset`会导致`std::string`中管理的指针变为野指针,使得后续对该指针的操作(例如读取或修改字符串内容)变得不可预测。 - **内存泄漏**:由于`memset`的操作可能会覆盖`std::string`内部使用...
JavaScript是Web开发中不可或缺的一部分,尤其对于前端开发者来说,它提供了丰富的功能来处理文本数据,如字符串。在本实例中,“Javascript实例-String对象-唐诗三百首”着重讲解了如何利用JavaScript的String...
Java中String对象具有不可变性(immutable)的特点,这意味着一旦创建了一个String对象,其内容就不能被更改。这种特性虽然确保了字符串的安全性和线程安全性,但也可能在某些情况下导致额外的内存消耗。因此,理解...
在C++中,我们通常会遇到三种主要的字符串形式:C字符串,string对象,以及字符串字面值。这些字符串形式各有特点,适用场景不同,理解它们之间的差异对于编写高效、安全的代码至关重要。 一、字符串字面值 字符串...