天天看点

详解:final修饰的变量 是引用变量不能变 还是引用变量指向的对象的内容不能变

直接上代码:

/**
 * 问: 使用final关键字 修饰一个变量时,是指引用变量不能变,还是指引用变量所指向的对象的内容不能变?
 * 
 * 答: 使用final关键字 修饰一个变量是,是指引用变量不能变,引用变量所指向的对象的内容是可以变的。
 * 
 * 验证思路:
 * 		在java中每一个对象都有自己独一无二的哈希编码,根据这个编码就可以找到对应的对象。
 * 		因此,根据哈希编码你就可以确定一个唯一的对象。
 * 		
 */
public class HomeTest {
	public static void main(String[] args) {
		// StringBuilder 线程不安全 但速度快
		final StringBuilder sb = new StringBuilder("验证");
		System.out.println("sb=" + sb);
		System.out.println("sb的哈希编码hashcode=" + sb.hashCode());
		
		// 为sb追加内容   验证变量所指向的对象的内容是否可变
		sb.append("成功");
		System.out.println("追加后的sb=" + sb);
		System.out.println("追加后的sb的哈希编码hashcode=" + sb.hashCode());
		
		//为sb 指向一个新的对象  验证引用变量是否可变
		//sb=new StringBuilder("nihao");该行会报错  所以引用变量不可变
		
		
		/*
		 * 经过验证  发现 sb的内容发生了改变,但是sb的哈希编码没有变化,说明是同一个对象。
		 * 
		 * 总结:使用final修饰的变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改。
		 * 如果是引用类型的变量,则在对其初始化之后不能指向一个另一个对象。
		 * 即 引用变量不可变,引用变量指向的对象的内容可变。
		 */
	}
}