字符串对象在 Java 中是不可变的。
扫码关注《Java学研大本营》,加入读者群,分享更多精彩
字符串对象在 Java 中是不可变的。不可变只是表示无法更改或更改某些内容。
一旦创建了 String 对象,它的数据和状态都不能被修改,但会创建一个新对象。
Java 使用字符串字面量概念。假设有五个引用变量,都指向同一个东西,“Emma” 如果一个引用变量改变了对象的值,所有的引用变量都会受到影响。因此,Java 中的 String 对象是不可变的。
堆空间的预定义区域称为“字符串池”,是 JVM 构建字符串对象的地方。当我们尝试声明一个新的 String 对象时,JVM 会检查该值是否已经存在于 String 池中。如果新对象已经存在,它会被赋予相同的值。由于此功能,Java 可以使用堆空间。
让我们尝试通过下面给出的示例来理解不变性的概念:
class immutability{
public static void main(String args[]){
String s="Emma";
s.concat(" Raducanu");//concat() method appends the string at the end
System.out.println(s); //will print Emma because strings are immutable objects
}
}
下图现在有助于解释它。
在这种情况下,Emma Raducanu 用于创建新对象而不是更改 Emma。出于这个原因,字符串被称为不可变的。
正如您在上图中看到的那样,创建了两个对象,但引用变量仍然指的是“Emma”而不是“Emma Raducanu” 。
但是,如果我们将其显式分配给引用变量,它将引用“Emma Raducanu”对象。
class Testimmutablestring1{
public static void main(String args[]){
String s="Emma";
s=s.concat(" Raducanu");
System.out.println(s); //print Emma Raducanu
}
}
在这种情况下,s指向“Emma Raducanu”。请注意,仍然没有修改 Emma 对象。
由于 String 对象是不可变的,因此我们不必担心跨多个线程共享项目时所需的同步。
参考文章:
https://medium.com/@sewmini.d.gunawardhana/immutable-string-in-java-cee066e91cf8
推荐书单
1.《项目驱动零起点学Java》
购买链接:https://item.jd.com/13607758.html
《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。
作者是国内知名Java教学者和传播者,一路披荆斩棘,兢兢业业20余年。积累了丰富的“培”“训”经验,也产出了很多优质的教学理论。
Java语言经过数十年的发展,体系逐渐变得庞大而复杂,本书芟繁就简,提炼出了最为重要的知识点,可以让读者轻松上手。本书配套有专栏课程,课程中提供了扩展内容。
《项目驱动零起点学Java》共分 13 章,围绕 6 个项目和 258 个代码示例,分别介绍了走进Java 的世界、变量与数据类型、运算符、流程控制、方法、数组、面向对象、异常、常用类、集合、I/O流、多线程、网络编程相关内容。《项目驱动零起点学Java》总结了马士兵老师从事Java培训十余年来经受了市场检验的教研成果,通过6 个项目以及每章的示例和习题,可以帮助读者快速掌握Java 编程的语法以及算法实现。扫描每章提供的二维码可观看相应章节内容的视频讲解。
2.《Java编程讲义》
购买链接:https://item.jd.com/13495830.html
《Java编程讲义》根据目前Java开发领域的实际需求,从初学者角度出发,详细讲解了Java技术的基础知识。
全书共15章,包括Java开发入门,Java语言基础,Java控制结构,数组,面向对象编程,继承和多态,抽象类、接口和内部类,异常处理,Java常用类库,集合与泛型,Lambda表达式,输入-输出流,多线程,JDBC数据库技术,网络编程等内容。内容全面覆盖.1ava开发必备的基础知识点,结合生活化案例展开讲解,程序代码给出了详细的注释,能够使初学者轻松领会Java技术精髓,快速掌握Java开发技能。
《Java编程讲义》适合作为高等院校相关专业的教材及教学参考书,也适合作为Java开发入门者的自学用书,还可供开发人员查阅、参考。
精彩回顾
扫码关注《Java学研大本营》,加入读者群,分享更多精彩