final修饰的方法入参以及入参是基本数据类型和对象的区别

结论:
结论1:基本数据类型,用final修饰之后,无法进行再赋值。也就是值和地址都无法修改
结论2:引用数据类型,用final修饰之后,无法进行对象赋值。也就是对象引用的地址无法修改。
结论3:引用数据类型,用final修饰之后,可以通过方法或者属性值赋值的方式,修改其对象内属性的值(如果对象的属性值是final修饰的,也就无法再赋值了)。也就是对象引用的地址无法修改。

1、斯坦福教授说的好,方法可以比喻成一台机器(面包机),没错,在我的机器(方法)里面,我要的参数加了final(要原料),你给我传过来的参数,机器里面就无法改了,也就是说在机器里的这个参数,一直指向的都是你传进来的参数。

package com.hgh.finaltest;

public class FinalTest {

	public static void main(String[] args) {
		finalTest(1, 2, "s1", "s2", new StringBuilder("sb1"), new StringBuilder("sb2"), new FinalClass(10, "hhh"));
	}
	/**
	 * 
	 * 输出的值:
	 * str1 value=s1,str1 hashcode=3614
object1 value=sb1,object1 hashcode=366712642
object1 value=sb1新加入的值,object1 hashcode=366712642
finalClass value=FinalClass [age=10, name=hhh],finalClass hashcode=1829164700
finalClass value=FinalClass [age=20, name=ddd],finalClass hashcode=1829164700

结论:
结论1:基本数据类型,用final修饰之后,无法进行再赋值。也就是值和地址都无法修改
结论2:引用数据类型,用final修饰之后,无法进行对象赋值。也就是对象引用的地址无法修改。
结论3:引用数据类型,用final修饰之后,可以通过方法或者属性值赋值的方式,修改其对象内属性的值(如果对象的属性值是final修饰的,也就无法再赋值了)。也就是对象引用的地址无法修改。
	 * @param i
	 * @param j
	 * @param str1
	 * @param str2
	 * @param object1
	 * @param object2
	 * @param finalClass
	 */
	public static void finalTest(
			final int i, final int j,
			final String str1, final String str2,
			final StringBuilder object1, final StringBuilder object2,
			final FinalClass finalClass){
		//以下代码会报错,无法执行,结论1:基本数据类型,用final修饰之后,无法进行再赋值。也就是值和地址都无法修改。The final local variable i cannot be assigned. It must be blank and not using a compound assignment
		//i = 8;
		System.out.println("str1 value=" + str1 +",str1 hashcode="+str1.hashCode());
		//以下代码会报错,无法执行,结论2:引用数据类型,用final修饰之后,无法进行对象赋值。也就是对象引用的地址无法修改。
		//str1 = UUID.randomUUID().toString();
		//以下代码会报错,无法执行,结论2:引用数据类型,用final修饰之后,无法进行再赋值。也就是地址无法修改。
		//str1 = "he llo ";
		String str3 = "333";
		//str1 = str3;
		System.out.println("object1 value=" + object1 +",object1 hashcode="+object1.hashCode());
		object1.append("新加入的值");
		System.out.println("object1 value=" + object1 +",object1 hashcode="+object1.hashCode());
		
		System.out.println("finalClass value=" + finalClass.toString() +",finalClass hashcode="+finalClass.hashCode());
		finalClass.age = 20;
		finalClass.name = "ddd";
		//以下代码会报错,无法执行,结论2:引用数据类型,用final修饰之后,无法进行对象赋值。也就是对象引用的地址无法修改。
		//finalClass = new FinalClass(1, "333");
		//结论3:引用数据类型,用final修饰之后,可以通过方法或者属性值赋值的方式,修改其对象内属性的值(如果对象的属性值是final修饰的,也就无法再赋值了)。也就是对象引用的地址无法修改。
		System.out.println("finalClass value=" + finalClass.toString() +",finalClass hashcode="+finalClass.hashCode());
		
		
	}
	
//	public class FinalClass{
//		
//		public int age;
//		public String name;
//		public FinalClass() {
//			// TODO Auto-generated constructor stub
//		}
//		public FinalClass(int age,String name) {
//			// TODO Auto-generated constructor stub
//			this.age =age;
//			this.name = name;
//		}
//		@Override
//		public String toString() {
//			return "FinalClass [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()="
//					+ super.toString() + "]";
//		}
//		
//	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值