用final修饰java方法的参数

当Java方法的参数用final修饰:

  • 如果输入参数是简单类型,那么在被调用函数内部不能修改参数的值。
  • 如果输入参数是对象的引用,那么在被调用函数内部不能改变对象的引用,即必须引用同一个对象,但可以修改对象的属性。

代码示例:

package com.thb;

public class Test1 {

	public static void main(String[] args) {
		Another another = new Another();
		
		System.out.println("简单类型入参验证:");
		int num = 10;
		System.out.println("在调用函数中,入参 num = " + num);
		another.method1(10);		
		another.method2(10);
		
		System.out.println("-------------------------");
		System.out.println("对象类型入参验证:");
		Point point = new Point(1, 2);
		System.out.println("在调用函数中,point对象:" + point);
		System.out.println("改变对象的属性前,在调用函数中:point.x = " + point.getX());
		another.method3(point);
		another.method4(point);
		System.out.println("在被调用函数中改变对象的属性后,在调用函数中得到的值:point.x = " + point.getX());
	}

}


package com.thb;

public class Another {

	public void method1(int num) {
		num += 20;  // 入参为简单类型,可以改变入参的值
		System.out.println("在method1中, 入参没用final修饰,改变了入参的值,num = " + num);
	}	

	public void method2(final int num) {
		// 入参为用final修饰的简单类型,不能修改参数的值。如果去掉下面代码前的注释,会编译报错		
		//num = 20;  
		System.out.println("在method2中, 入参用final修饰,入参值无法改变, num = " + num);
	}
	
	public void method3(Point point) {
		point = new Point(2, 4);  // 指向另外一个新创建的对象
		System.out.println("在method3中,入参没用final修饰,指向另外一新建对象: " + point);		
	}
	
	public void method4(final Point point) {
		point.setX(0);   // 指向同一对象,但可以改变对象的属性
		System.out.println("在method4中,入参用final修饰,指向同一个对象: " + point);		
	}
}


package com.thb;

public class Point {
	private int x;
	private int y;
	
	public Point(int x, int y) {
		this.x = x;
		this.y = y;	
	}
	
	public void setX(int x) {
		this.x  = x;
	}
	
	public int getX() {
		return this.x;
	}
}

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值