天天看點

詳解: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修飾的變量,如果是基本資料類型的變量,則其數值一旦在初始化之後便不能更改。
		 * 如果是引用類型的變量,則在對其初始化之後不能指向一個另一個對象。
		 * 即 引用變量不可變,引用變量指向的對象的内容可變。
		 */
	}
}