1.八大數(shù)據(jù)類型
byte移袍、short晾嘶、int、long、float钳吟、double圈匆、char扑毡、boolean
注意:String不屬于基本數(shù)據(jù)類型探遵。java.lang.String類是final類型的,因此不可以繼承這個類岩灭、不能修改這個類
2缨该、是否可以繼承String類?
String類是final類故不可以繼承。
3川背、"=="和equals方法究竟有什么區(qū)別贰拿?
(單獨把一個東西說清楚,然后再說清楚另一個熄云,這樣膨更,它們的區(qū)別自然就出來了,混在一起說缴允,則很難說清楚)
==操作符專門用來比較兩個變量的值是否相等荚守,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲的數(shù)值是否相同珍德,要比較兩個基本類型的數(shù)據(jù)或兩個引用變量是否相等,只能用==操作符矗漾。
如果一個變量指向的數(shù)據(jù)是對象類型的锈候,那么,這時候涉及了兩塊內(nèi)存敞贡,對象本身占用一塊內(nèi)存(堆內(nèi)存)泵琳,變量也占用一塊內(nèi)存,例如Objet obj = new Object();變量obj是一個內(nèi)存誊役,new Object()是另一個內(nèi)存获列,此時,變量obj所對應(yīng)的內(nèi)存中存儲的數(shù)值就是對象占用的那塊內(nèi)存的首地址蛔垢。對于指向?qū)ο箢愋偷淖兞炕骱ⅲ绻容^兩個變量是否指向同一個對象,即要看這兩個變量所對應(yīng)的內(nèi)存中的數(shù)值是否相等鹏漆,這時候就需要用==操作符進行比較巩梢。
equals方法是用于比較兩個獨立對象的內(nèi)容是否相同,就好比去比較兩個人的長相是否相同艺玲,它比較的兩個對象是獨立的括蝠。例如,對于下面的代碼:
String?a=new?String("foo");
String?b=new?String("foo");
兩條new語句創(chuàng)建了兩個對象板驳,然后用a,b這兩個變量分別指向了其中一個對象又跛,這是兩個不同的對象碍拆,它們的首地址是不同的若治,即a和b中存儲的數(shù)值是不相同的,所以感混,表達式a==b將返回false端幼,而這兩個對象中的內(nèi)容是相同的,所以弧满,表達式a.equals(b)將返回true婆跑。
在實際開發(fā)中,我們經(jīng)常要比較傳遞進行來的字符串內(nèi)容是否等庭呜,例如滑进,String input = …;input.equals(“quit”),許多人稍不注意就使用==進行比較了募谎,這是錯誤的扶关,隨便從網(wǎng)上找?guī)讉€項目實戰(zhàn)的教學(xué)視頻看看,里面就有大量這樣的錯誤数冬。記住节槐,字符串的比較基本上都是使用equals方法。
如果一個類沒有自己定義equals方法,那么它將繼承Object類的equals方法铜异,Object類的equals方法的實現(xiàn)代碼如下:
boolean?equals(Object?o){
return?this==o;
}
這說明哥倔,如果一個類沒有自己定義equals方法,它默認(rèn)的equals方法(從Object類繼承的)就是使用==操作符揍庄,也是在比較兩個變量指向的對象是否是同一對象咆蒿,這時候使用equals和使用==會得到同樣的結(jié)果,如果比較的是兩個獨立的對象則總返回false币绩。如果你編寫的類希望能夠比較該類創(chuàng)建的兩個實例對象的內(nèi)容是否相同蜡秽,那么你必須覆蓋equals方法,由你自己寫代碼來決定在什么情況即可認(rèn)為兩個對象的內(nèi)容是相同的缆镣。