java中常被忽略的幾個問題

2021-08-27 17:53:55 字數 1236 閱讀 6375

1、"=="和equals方法究竟有什麼區別?

==操作符是專門來比較變數的記憶體位址是否相等而不是物件本身,而equals是比較物件的內容。不過要注意的是,如果你要看清楚該類的equals方法底層是否也用了==操作符,不要想當然。

2、final關鍵字

final關鍵字,都知道如果修飾變數,該變數不能被修改,也就是不能改變,但是由於物件型變數的本質是"引用",使得"不變"也有了兩種含義:引用本身的不變,和引用指向的物件不變。

例子:引用本身的不變:

final stringbuffer a=new stringbuffer("immutable");

final stringbuffer b=new stringbuffer("not immutable");

a=b;//編譯期錯誤

引用指向的物件不變:

final stringbuffer a=new stringbuffer("immutable");

可見,final只對引用的"值"有效,它迫使引用只能指向初始指向的那個物件,改變它的指向會導致編譯期錯誤。至於它所指向的物件的變化,final是不負責的。這很類似==操作符:==操作符只負責引用的"值"相等,至於這個位址所指向的物件內容是否相等,==操作符是不管的。

** final只對引用變數的記憶體位址有約束力,對其物件內容的變化不具有約束力,這點類似於==操作符 **

3、 對於string s = "hello world!"的理解

這個語句生命的是乙個指向物件的引用,名為「s」,可以指向型別為string的任何物件,目前指向「hello world!」 這個string型別的物件

** 我們只是宣告了乙個只能指向string物件的引用變數所以,如果在剛才那句語句後面,如果再執行一句:string string = s;我們是宣告了另外乙個只能指向string物件的引用,名為string,並沒有第二個物件產生,string還是指向原來那個物件,也就是,和s指向同乙個物件。

4、string到底變了沒有

沒有。因為string被設計成不可變(immutable)類,所以它的所有物件都是不可變物件。請看下列**:

string s = "hello";

s = s + " world!";

string的內容並沒有改變,而是在記憶體中重新開闢了乙個位置存放hello world然後將s指向新的內容,所以不是內容變化了,而是s不在指向原來的那個物件了,而是指向了另乙個string物件。

java中常被忽略的幾個問題

1 和equals方法究竟有什麼區別?操作符是專門來比較變數的記憶體位址是否相等而不是物件本身,而equals是比較物件的內容。不過要注意的是,如果你要看清楚該類的equals方法底層是否也用了 操作符,不要想當然。2 final關鍵字 final關鍵字,都知道如果修飾變數,該變數不能被修改,也就是...

面試外企常被問到的幾個問題

面試外企常被問到的幾個問題請介紹一下你自己。這是外企常問的問題。一般人回答這個問題過於平常,只說姓名 年齡 愛好 工作經驗,這些在簡歷上都有,其實,外企最希望知道的是求職者能否勝任工作,包括 最強的技能 最深入研究的知識領域 個性中最積極的部分 做過的最成功的事,主要的成就等,這些都可以和學習無關,...

技術管理中常見的幾個問題

前幾天跟朋友聊天時,朋友說他剛剛從一家知名軟體公司面試出來,朋友去面試的是一家公司的技術管理崗位,所以在面試的時候被問及的問題也偏重於技術管理方面的問題,在與朋友的聊天中將這幾個問題歸納了一下,大致歸為如下幾個問題。在日常中你是如何行使管理職能的 這個問題以我的經驗來及參考常見的一些開發方法,在實際...