很多人都說在JAVA中用final來修飾方法參數的原因是防止方法參數在調用時被篡改,其實也就是這個原因,但理解起來可能會有歧義,我們需要注意的是,在final修飾的方法參數中,如果修飾的是基本類型,那么在這個方法的內部,基本類型的值是不能夠改變的,但是如果修飾的是引用類型的變量,那么就需要注意了,引用類型變量所指的引用是不能夠改變的,但是引用類型變量的值是可以改變的。
如下面的代碼:
package com.jd.test; public class Test{ public static void main(String hh[]){ int i = 1; System.out.println(i); checkInt(i); System.out.println(i); } /** * 對於基本類型,基本類型的值在方法內部是不能夠改變的 * @param i */ public static void checkInt(final int i) { //編譯不通過,final修飾的局部變量i的值是不能夠改變的 // i=10; } }
對於引用類型的變量,請看下面的代碼:
package com.jd.test; import com.jd.domain.User; /** * * final修飾參數的測試例子 * * @author zhanghao10@jd.com * @since 2015-10-8 */ public class Test{ public static void main(String hh[]){ User user=new User(); user.setId(1); user.setUserName("校長"); user.setPassword("123456"); checkInt(user); } /** * 對於基本類型,基本類型的值在方法內部是不能夠改變的 * @param i */ public static void checkInt(final User user) { //user變量的引用是不能夠改變的,否則的話,編譯會報錯 // user=new User(); //user變量的值是能夠修改的,但所指向的引用是不能夠改變的 user.setUserName("小王"); } }