Mutable and Immutable in JavaJava 是一种面向对象编程语言。作为一门面向对象编程语言,它所有的语法和机制都围绕着对象展开。其中一个基于对象的概念是可变(mutable)和不可变(immutable)字符串。Java 中的对象要么是可变的,要么是不可变的;这取决于对象如何被修改。 在本节中,我们将讨论 Java 中的可变对象和不可变对象。接下来,我们将看到它们之间的区别。 什么是可变对象可变对象是初始化后其值可以被更改的对象。在对象创建后,我们可以更改对象的值,例如字段和状态。例如,Java.util.Date、StringBuilder、StringBuffer 等。 当我们更改现有可变对象时,不会创建新对象;而是会修改现有对象的值。这些对象类提供了更改自身的方法。 可变对象提供 Getter 和 Setter(get() 和 set() 方法)。可变对象可能线程安全,也可能不线程安全。 什么是不可变对象不可变对象是初始化后其值无法被更改的对象。一旦对象创建,我们就无法更改任何内容。例如,原始类型对象如 int、long、float、double,所有 旧类、包装类、String 类 等。 简而言之,不可变意味着未修改或不可更改。一旦创建了不可变对象,其对象值和状态就无法更改。 不可变对象仅提供 Getter(get() 方法),而不提供 Setter(set() 方法)。 让我们看看如何创建可变和不可变对象的类。 如何创建可变类创建可变类需要以下两点:
考虑下面可变类的示例 输出 JavaTpoint Java Training 从上面的例子中,我们使用 setName 方法更改了 name 的值。 如何创建不可变类创建不可变类需要以下几点:
考虑下面的示例 输出 Core Java Training 因此,我们讨论了可变和不可变对象及类。接下来,让我们讨论它们之间的区别。 可变对象和不可变对象之间的区别以下是 Java 中可变对象和不可变对象之间的一些关键区别:
考虑下表
为什么 Java 中的 String 是不可变的Java 中的 String 是一个非常特殊的类,因为它几乎在所有 Java 程序中使用。因此,为了提高性能和安全性,它是不可变的。让我们详细了解一下。 在 Java 中,字符串使用字面量(literals)的概念。假设我们有一个对象,它有许多引用变量。在这种情况下,如果我们更改一个引用变量的值,它将影响整个对象及其所有值。 除了上述原因外,以下原因也使得 String 成为不可变的: 不可变对象非常简单,不需要同步,并且天生就是线程安全的。但是,不可变对象是构建其他对象的良好基础,因此我们需要特别小心地对待它们。 大多数开发人员会将 String 设为 final 对象,以便以后不能修改它。 结论我们已经讨论了 Java 中的可变和不可变对象,现在我们对可变和不可变对象及类有了清晰的理解。此外,我们还看到了如何创建可变和不可变类。 需要注意的是,可变对象一旦初始化就可以更改其值和状态,并且可能线程安全,也可能不线程安全。相比之下,不可变对象不能更改其状态和值,并且默认是线程安全的。 下一主题Java 检测有向图中的循环 |
? Java 凭借其强大的类型系统,可确保类型安全并 避免许多常见的编程错误。然而,这也意味着您可能会在编译期间遇到“类型不兼容”错误。当您尝试使用另一种类型的值来分配或使用一种类型的值时,就会发生这些错误……
阅读 4 分钟
Java 中有 23 种设计模式,它们为应用程序设计中常见的问题提供了明确的解决方案。它代表了应用程序及其流程的详细描述。它是许多……中可用的问题解决方案。
阅读9分钟
在引入线程概念之前,我们无法并行运行多个任务。这是一个缺点,为了消除这个缺点,引入了线程概念。线程是一个非常轻量级的进程,或者我们可以说它是...的最小部分。
阅读 8 分钟
在本节中,我们将讨论 Java 的模运算符。在数学中,基本有四种算术运算符:加法 (+)、减法 (-)、乘法 (*) 和除法 (/)。在编程中,除了这四种运算符之外,还有另一种称为模或模运算符的运算符。它表示……
阅读 2 分钟
Java 中的短路 && 和 || 运算符是什么?在 Java 中,短路运算符用于提高逻辑运算的效率和性能。这些运算符包括“”。由于它们使用条件语句,因此它们也称为“条件逻辑运算符”……
阅读 4 分钟
在竞争性编程中,使用高效可靠的库确实对生产力和性能产生了巨大的影响。在本教程中,我们将重点介绍 Collection Framework 中最重要的容器。Java 标准库包含以下数据结构:1. ArrayList ArrayList 是……的一部分
阅读 24 分钟
在 Java 中,Callable 接口在 Java 5 中被引入,作为现有 Runnable 接口的替代方案。它封装了一个任务,并将其传递给 Thread 或线程池进行异步执行。Callable 代表一个异步计算,其值可通过 Future 获得……
阅读 4 分钟
在编程世界中,处理数字是一项基本任务。通常,我们需要为各种应用程序(如密码学、数据验证或数学运算)来操作数字中的各个数字。这个过程称为数字提取。在本节中,我们将探讨不同的...
阅读 3 分钟
在 Java 编程语言中,嵌套类是在类内部定义的类。这些嵌套类可以分为两类:静态嵌套类和非静态嵌套类,也称为内部类。它们的主要区别在于它们的关系...
阅读 4 分钟
类似于 YACC,它也是一个解析器。是 Java Compiler-Compiler 的简写。它是一个由 Oracle Corporation 开发的开源流行解析器生成器和词法分析器生成器工具。它用 Java 编程语言编写。它在 BSD 许可证下许可....
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India