Java Getter方法返回类对象

本文探讨了Java中Getter方法返回类对象时,如何处理对象引用的问题。通过示例展示了对象的引用传递特性,解释了为何修改通过Getter获取的对象属性不会影响原对象的属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先创建一个类:

/**
 * 雇员类
 * @author yifan
 * @version 1.0 2014-05-12
 */
class Employ {
	/**
	 * 构建一个新的职员类
	 * @param name 职员姓名
	 * @param salary 工资
	 * @param hireDate 入职时间
	 */
	public Employ (String name, double salary, Date hireDate) {
		this.name = name;
		this.salary = salary;
		this.hireDate = hireDate;
	}
	/**
	 * 获取姓名
	 * @return 姓名
	 */
	public String getName() {
		return this.name;
	}
	/**
	 * 获取当前工资
	 * @return 当前工资
	 */
	public double getSalary() {
		return this.salary;
	}
	/**
	 * 安全的获取入职时间
	 * @return 入职时间
	 */
	public Date getHireDate() {
		return (Date) this.hireDate.clone();
	}
	/**
	 * 非安全的获取入职时间
	 * @return
	 */
	public Date gethireDate() {
		return this.hireDate;
	}
	
	/**
	 * 提高工资
	 * @param byPercent 提高的系数
	 */
	public void raiseSalary (double byPercent) {
		this.salary += this.salary*byPercent/100;
	}
	private String name;
	private double salary;
	private Date hireDate;
}

在main方法中添加如下代码

// 下面试图修改员工的入职日期
		// 不安全的获取信息方法使用
		Date date= staff[0].gethireDate();
		String name =  staff[0].getName();
		name = name.substring(2);
		System.out.println(name);
		double ten = 10 * 365.25 * 24 * 60 * 60 * 1000;
		date.setTime(date.getTime() - (long)ten);
		System.out.println("不安全的信息访问:" + staff[0].getName() + staff[0].getHireDate().toString());
		// 安全的获取信息放法使用
		Date date1= staff[1].getHireDate();
		double ten1 = 10 * 365.25 * 24 * 60 * 60 * 1000;
		date.setTime(date1.getTime() - (long)ten1);
		System.out.println("安全的信息访问:" + staff[1].getName() + staff[1].getHireDate().toString());

上面的没有定义的对象自己去创建


运行程序后的结果是

张三123
不安全的获取信息方法调用张三Mon Dec 12 12:00:00 CST 1977
安全的获取信息方法调用李四Sat Jan 23 00:00:00 CST 1999


问题1: 上面更改date的值为什么能够修改职员对象的入职时间呢?

因为date是一个对象,Java中对于对象是引用传递, 所以实际上date就是指向员工入职时间的一个指针,所以对date对象进行了修改就相当与修改了员工的入职时间

那么问题2就来了

上面对name进行了修改位置为什么没有更改员工的姓名呢?

因为name对象的修改实际上就是将name指向了一个新的地方,而不是修改员工名字



说的不是很明白,希望大神无喷!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值