搜索
首页Javajava教程可变与不可变 Java

可变对象具有可以修改的字段;不可变对象没有在创建对象后可以更改的字段。不可变对象是指其状态在创建后就无法更改的对象。可变和不可变是java中的两类对象。在本文中,我们将了解 java 中可变对象和不可变对象之间的区别。此外,我们还将看到 Java 代码示例,显示 Java 中可变类和不可变类之间的差异。

广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试

可变 Java 与不可变 Java 之间的正面比较(信息图表)

以下是 Mutable 与 Immutable Java 之间的 6 大差异:

可变与不可变 Java

可变 Java 与不可变 Java 之间的主要区别

以下是 Java 中可变对象和不可变对象之间的主要区别:

  • 可变对象是我们可以在不创建新对象的情况下更改对象状态的对象。也就是说,可变对象在创建后可以修改。对于不可变对象,每当对象的状态改变时,我们都会得到一个新对象。在处理不可变对象时,我们不允许在对象创建后更改其状态。
  • 一般情况下,可变对象提供可以更改对象内容的方法,而不可变对象不提供任何更改其内容的方法。
  • 在可变的java类中,存在getter和setter方法,而在不可变的类中,只有getter方法可用,而没有setter方法。
  • 可变类可能是线程安全的,也可能不是,而不可变类默认是线程安全的。
  • java 中可变类的示例有 java.util.Date、StringBuffer、StringBuilder 等,而 java 遗留类、包装类、String 类是 java 中不可变类的示例。

可变与不可变 Java 比较表

让我们讨论 Mutable 与 Immutable Java 之间的主要比较:

 可变

 Mutable

Immutable

Java Mutable object can be modified after its creation. Java Immutable object cannot be modified after its creation.
No new object is formed when changes are made to an existing object. Whenever an existing object is changed, a new object is formed.
It provides methods to change the content of an object. It does not provide methods for changing the content of an object.
Getter and setter methods are present in mutable classes. Only getter methods are present and not setter methods.
Mutable classes may or may not be thread-safe. Immutable classes are thread-safe by default.
Some common examples of mutable classes in java are StringBuffer, StringBuilder, and java.util.Date. All Legacy classes, Wrapper classes, String class, are common examples of Immutable classes in java.

不可变

Java 可变对象在创建后可以修改。 Java 不可变对象创建后无法修改。 对现有对象进行更改时不会形成新对象。 每当现有对象发生更改时,都会形成一个新对象。 它提供了更改对象内容的方法。 它不提供更改对象内容的方法。 可变类中存在 getter 和 setter 方法。 仅存在 getter 方法,不存在 setter 方法。 可变类可能是也可能不是线程安全的。 不可变类默认是线程安全的。 java 中可变类的一些常见示例是 StringBuffer、StringBuilder 和 java.util.Date。 所有的 Legacy 类、Wrapper 类、String 类都是 java 中 Immutable 类的常见示例。 表>

可变和不可变 Java 示例

可变和不可变 Java 的示例如下:

示例 #1 – Java 中的可变类

现在我们将看到 Java 代码示例,展示了在 Java 中创建可变类和不可变类。

代码:

package com.edubca.mutabledemo;
public class MutableDemo {
private String studentName;
private int rollNumber;
MutableDemo (String studentName, int rollNumber) {
this.studentName = studentName;
this.rollNumber = rollNumber;
}
public String getStudentName() {
return studentName;
}
// this setter can modify the name
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getRollNumber() {
return rollNumber;
}
// this setter can modify roll number
public void setRollNumber(int rollNumber) {
this.rollNumber = rollNumber;
}
public static void main(String[] args) {
MutableDemo obj = new MutableDemo ("John" , 100);
System.out.println("Original Name is " + obj.getStudentName());
System.out.println("Original Roll Number is " + obj.getRollNumber());
// update the name, and roll number as  is mutable
obj.setStudentName("James");
obj.setRollNumber(102);
System.out.println("Modified Name is " + obj.getStudentName());
System.out.println("Modified Roll Number is " + obj.getRollNumber());
}
}

输出:

可变与不可变 Java

上面的代码展示了在java中使用getter和setter创建一个可变类。

示例 #2 – Java 中的不可变类

现在我们将了解如何在 Java 中创建不可变类。

代码:

package com.edubca.immutabledemo;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
public ImmutableDemo  (String studentName, int rollNumber) {
this.studentName = studentName;
this.rollNumber = rollNumber;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public static void main(String[] args) {
ImmutableDemo obj = new ImmutableDemo  ("John" , 100);
// Since no getters are available contents cannot be modified.
// Also as variables are declared final they cannot be modified
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
}
}

输出:

可变与不可变 Java

上面的代码显示了java不可变类的创建。创建不可变类时应牢记以下几点:

  • 不可变类必须是final的,因为它不应该被继承。
  • 不可变类的所有字段都应该是final的。
  • 如果任何可变对象用作不可变类中的字段,则必须进行特殊处理以防止其内容被修改。
  • 应该存在公共构造函数。
  • 应该定义所有变量的 getter 方法。
  • 任何变量都不应该出现 Setter 方法。

结论

通过上面的讨论,我们清楚地了解了java中可变和不可变的区别。此外,我们还看到了 Java 示例,展示了如何创建可变类和不可变类。值得注意的是,不可变类默认是线程安全的,而可变类可能是也可能不是线程安全的。

以上是可变与不可变 Java的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
是否有任何威胁或增强Java平台独立性的新兴技术?是否有任何威胁或增强Java平台独立性的新兴技术?Apr 24, 2025 am 12:11 AM

新兴技术对Java的平台独立性既有威胁也有增强。1)云计算和容器化技术如Docker增强了Java的平台独立性,但需要优化以适应不同云环境。2)WebAssembly通过GraalVM编译Java代码,扩展了其平台独立性,但需与其他语言竞争性能。

JVM的实现是什么,它们都提供了相同的平台独立性?JVM的实现是什么,它们都提供了相同的平台独立性?Apr 24, 2025 am 12:10 AM

不同JVM实现都能提供平台独立性,但表现略有不同。1.OracleHotSpot和OpenJDKJVM在平台独立性上表现相似,但OpenJDK可能需额外配置。2.IBMJ9JVM在特定操作系统上表现优化。3.GraalVM支持多语言,需额外配置。4.AzulZingJVM需特定平台调整。

平台独立性如何降低发展成本和时间?平台独立性如何降低发展成本和时间?Apr 24, 2025 am 12:08 AM

平台独立性通过在多种操作系统上运行同一套代码,降低开发成本和缩短开发时间。具体表现为:1.减少开发时间,只需维护一套代码;2.降低维护成本,统一测试流程;3.快速迭代和团队协作,简化部署过程。

Java的平台独立性如何促进代码重用?Java的平台独立性如何促进代码重用?Apr 24, 2025 am 12:05 AM

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

您如何在Java应用程序中对平台特定问题进行故障排除?您如何在Java应用程序中对平台特定问题进行故障排除?Apr 24, 2025 am 12:04 AM

要解决Java应用程序中的平台特定问题,可以采取以下步骤:1.使用Java的System类查看系统属性以了解运行环境。2.利用File类或java.nio.file包处理文件路径。3.根据操作系统条件加载本地库。4.使用VisualVM或JProfiler优化跨平台性能。5.通过Docker容器化确保测试环境与生产环境一致。6.利用GitHubActions在多个平台上进行自动化测试。这些方法有助于有效地解决Java应用程序中的平台特定问题。

JVM中的类加载程序子系统如何促进平台独立性?JVM中的类加载程序子系统如何促进平台独立性?Apr 23, 2025 am 12:14 AM

类加载器通过统一的类文件格式、动态加载、双亲委派模型和平台无关的字节码,确保Java程序在不同平台上的一致性和兼容性,实现平台独立性。

Java编译器会产生特定于平台的代码吗?解释。Java编译器会产生特定于平台的代码吗?解释。Apr 23, 2025 am 12:09 AM

Java编译器生成的代码是平台无关的,但最终执行的代码是平台特定的。1.Java源代码编译成平台无关的字节码。2.JVM将字节码转换为特定平台的机器码,确保跨平台运行但性能可能不同。

JVM如何处理不同操作系统的多线程?JVM如何处理不同操作系统的多线程?Apr 23, 2025 am 12:07 AM

多线程在现代编程中重要,因为它能提高程序的响应性和资源利用率,并处理复杂的并发任务。JVM通过线程映射、调度机制和同步锁机制,在不同操作系统上确保多线程的一致性和高效性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)