Java –可变和不可变对象

本文向您展示Java中Mutable和Immutable对象之间的区别

1. 可变对象 –创建对象后,您可以更改状态和字段。 例如: StringBuilderjava.util.Date等。

2. 不可变对象 –创建对象后,您将无法进行任何更改。 例如: String ,装箱的原始对象,例如IntegerLong等。

1. Java可变示例

通常,它提供了一种修改字段值的方法,并且可以扩展对象。

MutableExample.java
package com.mkyong;

public class MutableExample {

	private String name;

	MutableClass(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	// this setter can modify the name
	public void setName(String name) {
		this.name = name;
	}

	public static void main(String[] args) {

		MutableExample obj = new MutableExample("mkyong");
		System.out.println(obj.getName());

		// update the name, this object is mutable
		obj.setName("new mkyong");
		System.out.println(obj.getName());

	}
}

输出量

mkyong
new mkyong

2. Java不可变示例

要创建Immutable对象,请将类定为final,并且不提供任何修改字段的方法。

ImmutableExample.java
package com.mkyong;

// make this class final, no one can extend this class
public final class ImmutableExample {

	private String name;

	ImmutableExample (String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	//no setter
	
	public static void main(String[] args) {

		ImmutableExample obj = new ImmutableExample("mkyong");
		System.out.println(obj.getName());

		// there is no way to update the name after the object is created.
		// obj.setName("new mkyong");
		// System.out.println(obj.getName());

	}
}

输出量

mkyong

注意
不可变对象简单,线程安全(不需要同步),不易出错且更安全。 如果可能,使所有对象不变。

附言:请参阅《有效Java书籍》第15项:最小化可变性。

参考文献

  1. 可变对象与不可变对象
  2. 根据Java文档的不可变对象

翻译自: https://mkyong.com/java/java-mutable-and-immutable-objects/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值