`
daur
  • 浏览: 15671 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

String的对象内容不可更改

    博客分类:
  • JAVA
 
阅读更多

但究竟是为什么要这么做呢?

 

如果考虑是如何将 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 是可更改的简单假象,更多的复杂的场景可以考虑,比如多线程的操作。

0
0
分享到:
评论

相关推荐

    String型的不可变性

    "String型的不可变性" Java 中的 String 型是一个特殊的包装类数据,它具有不可变性。什么是不可变性呢?简单来说,就是 String 对象一旦被创建,不能被修改。那么,为什么 String 对象不能被修改呢?这就需要从 ...

    Java中的String对象是不可变的吗Java开发Jav

    在Java编程语言中,String对象被认为是不可变的。这个特性是Java设计者为了优化性能、安全性和线程安全性而有意设定的。理解String对象的不可变性对于Java开发者来说至关重要,因为它影响着代码的编写、内存管理和多...

    String创建对象

    6. **String是不可变的**: `String`类的对象一旦创建,其内容就不能更改。每次对`String`对象进行修改操作(如`concat()`、`substring()`等),都会生成新的`String`对象。 7. **垃圾回收与String对象**: 如果...

    Java String对象的经典问题

    `String`类是不可变的(immutable),这意味着一旦一个`String`对象被创建,它的内容就不能被改变。这种特性使得`String`类非常适合在多线程环境中使用,因为不需要担心其内容被多个线程同时修改。 #### 二、String...

    String类创建对象问题

    尽管如此,`String` 类拥有其独特之处,比如它是不可变的(final),这保证了字符串一旦创建便不能更改其内容。 **常量池(Constant Pool)**:在 Java 编译阶段确定的数据集合,存储在 `.class` 文件中。它包含了类...

    Java 中的 String对象为什么是不可变的

    1. **线程安全**:由于String对象不可变,所以在多线程环境中,多个线程可以安全地共享同一个String对象,无需担心同步问题。这提高了程序的并发性能。 2. **缓存哈希码**:String对象经常用于HashMap等数据结构中...

    java中Object对象String对象的解析.pdf

    - `String`对象是不可变的,这意味着一旦创建,其内容就不能更改。这与`StringBuilder`或`StringBuffer`类的可变字符串不同。 - 直接通过字面量创建的`String`对象,如`"a"`,会存储在字符串池(String Pool)中。...

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

    在Java编程语言中,String类是一个非常特殊且重要的类,它是不可变的。这个特性意味着一旦创建了一个String对象,它的值就不能被改变。这个设计决策背后有多种原因,包括性能、安全性和线程安全性。 首先,理解...

    JavaScript String 对象参考手册

    字符串在JavaScript中是一种不可变的数据类型,这意味着一旦创建,就不能更改其内容。尽管如此,String对象提供了丰富的内置方法来处理字符串的各种需求,包括查找、替换、连接、格式化以及提取子字符串等。 首先,...

    Java中的String为什么是不可变的共7页.pdf.z

    3. **线程安全**:由于`String`对象不可变,它们在多线程环境下可以安全地共享,无需额外的同步措施。这是Java设计者为了提高安全性及并发性能所做的决策。 4. **字符串池**:Java使用字符串池来存储常量字符串,以...

    Java常用类与基础API-String的理解与不可变性

    String对象不可变,无法修改 ``` 这段代码是错误的,因为 `String` 对象的字符内容是不可变的,不能通过 `charAt` 或其他方法直接修改其内容。 ##### (3) 举例3 利用 `StringBuilder` 或 `StringBuffer` 修改字符...

    String.pdf

    在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类...

    小心String的陷阱——深入剖析Java中String的处理机制

    `String`在Java中被设计为不可变对象,意味着一旦创建了一个`String`对象,其内容就不能被更改。如果尝试修改`String`的内容,实际上是在内存中创建一个新的`String`对象来存储新的内容。这一特性确保了`String`对象...

    Java string不可变原理实例解析

    Java中的String类是不可变的,这意味着一旦创建了一个String对象,就不能改变它的内容。这个特性是由几个关键的设计决策和语言特性共同决定的。首先,String类被声明为final,这防止了其他类对其进行子类化并改变其...

    String及StringBuffer和StringBuilder的区别

    String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一个新的 String 对象,然后将指针指向新的 String 对象。这意味着,如果经常改变字符串内容,最好不要使用 String 类型,因为每次生成对象都会对...

    包含string对象的结构与memset初始化操作

    - **野指针问题**:`memset`会导致`std::string`中管理的指针变为野指针,使得后续对该指针的操作(例如读取或修改字符串内容)变得不可预测。 - **内存泄漏**:由于`memset`的操作可能会覆盖`std::string`内部使用...

    Javascript实例-String对象-唐诗三百首

    JavaScript是Web开发中不可或缺的一部分,尤其对于前端开发者来说,它提供了丰富的功能来处理文本数据,如字符串。在本实例中,“Javascript实例-String对象-唐诗三百首”着重讲解了如何利用JavaScript的String...

    String容量大小区分

    Java中String对象具有不可变性(immutable)的特点,这意味着一旦创建了一个String对象,其内容就不能被更改。这种特性虽然确保了字符串的安全性和线程安全性,但也可能在某些情况下导致额外的内存消耗。因此,理解...

    c字符串,string对象,字符串字面值的区别详解

    在C++中,我们通常会遇到三种主要的字符串形式:C字符串,string对象,以及字符串字面值。这些字符串形式各有特点,适用场景不同,理解它们之间的差异对于编写高效、安全的代码至关重要。 一、字符串字面值 字符串...

Global site tag (gtag.js) - Google Analytics