10.使用final關鍵字修飾一個變量時...


10.使用final關鍵字修飾一個變量時,是引用不能變,還是引用的對象不能變?

        答:引用不能變,不能將引用再次指向另一個新的對象,但引用所指向的對象中的內容是可以改變的。

補充:

    1.對於基本類型,final使數值恆定不變,而用於對象引用,final使引用恆定不變。

    2.一個既是static又是final的域只占據一段不能改變的存儲空間。

    3.定義為public,則可以被用於包之外;定義為static,則強調只有一份;定義為final,則說明他是一個常量。

    4.帶有恆定初始值(即編譯其常量)的final static基本類型全用大寫字母命名,並且字與字之間用下划線隔開。

11.“==”和equals方法究竟有什么區別?

    Java中的數據類型,可以分為兩類:

    一.基本數據類型:

                 數值型 :(整數類型byte,short,int,long)(浮點類型float,double)

                 字符型 :char

                 布爾型 :boolean

        他們之間的比較,應該用雙等會(==),比較的是他們的值。

    二.引用數據類型:

                 類 :class

                 接口 :interface

                 數組 :[ ]

         當他們用==進行比較的時候,比較的是對象的引用。

  說明:java當中所有的類都繼承於Object這個基類,在object中的基類定義了一個equals方法,public boolean equals(Object obj) {

     return  ( this  == obj); } 這個方法的初始行為是比較引用,但在一些類庫中這個方法被覆蓋掉了,如String,Integer,Date等在這些類中equals有其自身的實現,而不再是比較對象在棧內存中的地址(即引用)了,如果不覆蓋,則equals默認行為是比較引用。
     對於引用數據類型之間進行equals比較,在沒有覆蓋equals方法的情況下,他們之間的比較還是基於對象的引用,因為object的equals方法也是用==進行比較的,所有比較后的結果與雙等號的結果相同。eg:
              class Value {

                    int i ;

                }

               public class EqualsDemo {

                     public static void main(String args[]){

                          Value v1=new Value();

                          Value v2=new Value();

                          v1.i=v2.i=100;

                          System.out.print(v1.equals(v2));

                 }

            } /*Output:false

             


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM