首页  >  文章  >  Java  >  可变与不可变 Java

可变与不可变 Java

WBOY
WBOY原创
2024-08-30 15:41:09356浏览

可变对象具有可以修改的字段;不可变对象没有在创建对象后可以更改的字段。不可变对象是指其状态在创建后就无法更改的对象。可变和不可变是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