文章大綱
- 一: float f = 6.6 這個代碼是否有問題?
- 追問1: short s1 = 1; s1 = s1 + 1;存在問題嗎,存在則具體說明,short s1 = 1; s1 += 1;存在問題嗎?
- 二: &和&&的區別?
- 三: Math.round(2.5) 等于多少?Math.round(-2.5)等于多少?
- 四: switch(condition)中,condition的值可以是哪些型別?
- 五: 當兩個物件x、y的equals方法為true時,他們的hashCode方法回傳的值可以是不同,這個說法正確?
- 追問1: 重寫equals方法應該注意哪些事項
- 追問2: 重寫equals方法應該大概包含哪些內容
- 每日小結
| 一: 前言 |
- 大家好,這里是IT學習日記,一個非雙一流大學畢業的深漂族,年少曾憧憬大廠,面試過許多家公司,也曾踩過無數坑,深知面試技巧和知識廣度與深度對一個應屆生乃至作業多年的開發者的重要性,
- 故特意收集了各個公司、大廠的面試高頻題,通過每天打卡的方式,和大家一起記錄和學習,希望能夠幫助到應屆生和開發者們少走彎路,一起沖向大廠!!!

| 二: 面試題目 |
一: float f = 6.6 這個代碼是否有問題?
?? 有,在JAVA語言中,默認小數是雙精度(double),而float是單精度型別,使用float接收雙精度的數值,相當于向下轉型(down-casting),會造成精度丟失,因此需要強制型別轉換即float f = (float)6.6或者在數值后指定型別即float f = 6.6F;

追問1: short s1 = 1; s1 = s1 + 1;存在問題嗎,存在則具體說明,short s1 = 1; s1 += 1;存在問題嗎?
?? s1 = s1 + 1存在問題,無法通過編譯,因為1是int型別在JAVA語言中占4個位元組,而short型別在JAVA中占2個位元組,使用short型別接收,則表明需要強制型別轉換即寫成:想要編譯通過需要寫成: s1 = (short) (s1 + 1);
?? short s1 = 1; s1 += 1;寫法沒有錯誤,可以正常編譯,"+="是一個復合運算子,JAVA編譯器會對它進行特殊處理,它包含了隱式的強制型別轉換,相當于s1 = (short)s1 + 1;

二: &和&&的區別?
?? 1、&運算子有兩種用法:
?? (1)按位與: 具體的含義是參與運算的兩數各對應的二進制位相與,只有對應的兩個二進位均為1時,結果位才為1 ,否則為0,
?? (2)邏輯與: 要求左右兩邊的條件都為true時,回傳的結果才為true,否則為false,

?? 2、&&運算子也叫短路與運算,特點如下:
?? (1)、如果&&左邊的運算式的值是false,右邊的運算式會被直接短路掉,不會進行運算,只有運算子兩邊的條件都為真時,才會回傳true,
?? (2)、它的運用場景很多,合理運用可以避免空指標,如判斷用戶名不是null且不為空字串時,使用username != null &&!username.equals(“”),運算子的條件順序不能調換,否則會出現空指標,
?? (3)、邏輯或運算子(|)和短路或運算子(||)的差別也是相似,短路或運算子(||)只要運算子左邊的條件為真,則不運行右邊的條件判斷,直接回傳true,
三: Math.round(2.5) 等于多少?Math.round(-2.5)等于多少?
?? round方法的作用是四舍五入,Math.round(2.5)的回傳值是3,Math.round(-2.5)的回傳值是-2,四舍五入的原理是在引數上加0.5然后進行下取整(向下取整表示取更小的值),

四: switch(condition)中,condition的值可以是哪些型別?
??1、Java5以前,switch(condition)中,condition只能是byte、short、char、int(包括它們的包裝型別)型別的值,
??2、Java5開始,Java中引入了列舉型別,condition也可以是enum型別的值
??3、Java7開始,condition還可以是字串(String),但是長整型(long),浮點數(float)到目前為止還不支持,

五: 當兩個物件x、y的equals方法為true時,他們的hashCode方法回傳的值可以是不同,這個說法正確?
??這個說法是錯誤的!當x.equals(y)時,它們的hash code也應該相同,對于equals和hashCode方法Java中有以下的規定:
??1、如果兩個物件相同(equals方法回傳true),那么它們的hashCode值一定要相同;
??2、如果兩個物件的hashCode相同,它們equals并不一定相同,只能說明兩個物件在散列存盤結構中,存放在相同的一個位置,
??3、如果違背了上面兩點的規范,那么在使用容器的時候,在Set集合中可能出現相同的物件,增加元素的效率會大大下降,頻繁的哈希沖突會導致性能大大的下降,
追問1: 重寫equals方法應該注意哪些事項
??如果重寫了一個物件的equals方法,那么一定要重寫這個物件的hashCode方法,目的是為了保證equals方法相同的物件擁有相同的hashCode,《Effective Java》書籍中寫到重寫equals需要注意以下事項:
??1、自反性: 針對非空的x,使用x.equals(x)應該回傳true
??2、對稱性: 針對x,y,如果x.equals(y)為true,那么y.equals(x)也應該為true
??3、傳遞性: 如有x,y,z,存在x.equals(y)和y.equals(z)都為True,那么x.equals(z)也應該為true
??4、一致性: 如果比較物件未發生改變,則反復呼叫equals方法應該回傳同樣的結果
??5、對于任意的非空x,x.equals(null)應該回傳false
追問2: 重寫equals方法應該大概包含哪些內容
??一個好的equals方法重寫應該具有以下的特點:
??1、使用==運算子檢查”,判斷引數是否為這個物件的參考”;
??2、使用instanceof運算子檢查”引數是否為正確的型別”;
??3、對于類中的關鍵屬性,檢查引數傳入物件的屬性是否與之相匹配;
??4、撰寫完equals方法后,要判斷它是否滿足自反性、對稱性、傳遞性、一致性;
??6、重寫equals時總是要重寫hashCode;
??7、不要將equals方法引數中的Object物件替換為其他的型別,在重寫時不要忘掉@Override注解,
每日小結
?? 不積跬步,無以至千里;不積小流,無以成江海,今天播種努力的種子,總會有一天發芽!
?? 歡迎大家關注,如果覺得文章對你有幫助,不要忘記一鍵三連哦,你的支持是我創作更加優質文章的動力,希望大家都能夠早日拿到心儀的Offer,有任何面試問題可以私信我,歡迎大家投稿面試題目哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/286582.html
標籤:java
上一篇:linux服務器專案部署
下一篇:Java 面試都只是背答案嗎?
