final修飾的方法入參以及入參是基本資料型別和物件的區別
阿新 • • 發佈:2018-12-18
結論:
結論1:基本資料型別,用final修飾之後,無法進行再賦值。也就是值和地址都無法修改
結論2:引用資料型別,用final修飾之後,無法進行物件賦值。也就是物件引用的地址無法修改。
結論3:引用資料型別,用final修飾之後,可以通過方法或者屬性值賦值的方式,修改其物件內屬性的值(如果物件的屬性值是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() + "]"; // } // // } }