1.問:被final修飾的引用變量指向的對象內容可變嗎?java
答:引用變量被final修飾以後,雖然不能再指向其餘對象,可是它指向安全
的對象的內容是可變的。app
2.java方法的參數 爲何有時會加上final關鍵字?dom
答:雖然不少java文檔說java是值傳遞的,其實java中對象的傳輸能夠認爲是引用傳遞。在方法中若是對參數中的內容進行修改的話,調用發起方的數據也會同步發生變化。而設置了final就確保,不會也不能對於參數進行修改,保證了調用發起方數據的安全。
這裏的引用傳遞通常只正對引用對象好比User 等實體。spa
public class Test { public static void main(String[] args) { MyClass3 myClass = new MyClass3(); StringBuffer buffer = new StringBuffer("hello"); myClass.changeValue(buffer); System.out.println(buffer.toString()); } } class MyClass3 { void changeValue(final StringBuffer buffer) { buffer.append("world"); } } //結果輸出helloworld
3.final和staticcode
不少時候會容易把static和final關鍵字混淆,static做用於成員變量用來表示只保存一份副本,而final的做用是用來保證變量不可變。看下面這個例子:對象
public static void main(String[] args) { MyClass myClass1 = new MyClass(); MyClass myClass2 = new MyClass(); System.out.println(myClass1.i); System.out.println(myClass1.j); System.out.println(myClass2.i); System.out.println(myClass2.j); } static class MyClass { public final double i = Math.random(); public static double j = Math.random(); }
運行這段代碼就會發現,每次打印的兩個j值都是同樣的,而i的值倒是不一樣的。從這裏就能夠知道final和static變量的區別了。--statiic的成員變量是屬於類的,不能夠被修改的。文檔