五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

知了堂Java|Java基礎面試題(三)

2021-11-04 10:02 作者:匯智知了堂  | 我要投稿


11.short s1 = 1; s1 = s1 + 1; 有錯嗎?short s1 = 1; s1 += 1 有錯嗎 答:前者不正確,后者正確。對于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 類型,因此 s1+1 運算結果也 是 int 型,需要強制轉換類型才能賦值給 short 型。而 short s1 = 1; s1 += 1;可以正確編譯,因為 s1+= 1;相當于 s1 = (short)(s1 + 1);其中有隱含的強制類型轉換?


12.字符串"+"運行原理什么??

在源程序中使用了"+",但在編譯時仍然將"+"轉換成 StringBuilder。因此,我們可以得出結論,在 Java 中無論使用何種方式進行字符串連接,實際上都使用的是 StringBuilder。雖然編譯器將"+"轉換成了 StringBuilder 分析下面的代碼

上面的代碼感覺沒有什么奇怪的現(xiàn)象,且從表面上看,對字符串和整型使用"+"號并沒有什么區(qū)別 我們來看看上面代碼的本質,介紹JDK自帶 jad 工具,此工具能將 .class 文件進行反編譯成 Java Byte Code ,執(zhí)行命令

反編譯后代碼如下

使用jad反編譯的好處之一就是可以同時生成字節(jié)碼和源代碼。這樣可以進行對照研究。從上面的代碼 很容易看出,雖然在源程序中使用了"+",但在編譯時仍然將"+"轉換成StringBuilder。因此,我們可以 得出結論,在Java中無論使用何種方式進行字符串連接,實際上都使用的是StringBuilder 如果使用循環(huán)來連接字符串,那么產出的 Java Byte Code 就會有很大區(qū)別

上面的代碼返編譯后的 Java Byte Code 如下

大家可以看到,雖然編譯器將"+"轉換成了StringBuilder,但創(chuàng)建StringBuilder對象的位置卻在for語句 內部。這就意味著每執(zhí)行一次循環(huán),就會創(chuàng)建一個StringBuilder對象(對于本例來說,是創(chuàng)建了10個 StringBuilder對象),雖然Java有垃圾回收器,但這個回收器的工作時間是不定的。如果不斷產生這樣 的垃圾,那么仍然會占用大量的資源。解決這個問題的方法就是在程序中直接使用StringBuilder來連接 字符串,代碼如下

注意: 在使用StringBuilder時要注意,盡量不要"+"和StringBuilder混著用,否則會創(chuàng)建更多的 StringBuilder對象 StringBuffer和StringBuilder的功能基本一樣,只是StringBuffer是線程安全的,而StringBuilder 不是線程安全的。因此,StringBuilder的效率會更高

13.方法區(qū)存放什么東西?

  • 方法區(qū)又叫靜態(tài)區(qū),包含所有的class文件和static變量?

  • 方法區(qū)中包含的都是在整個程序中永遠唯一的元素,如class,static變量?

  • 運行時常量池都分配在Java虛擬機的方法區(qū)之中

今天的分享就到這里啦,持續(xù)關注我們,學習更多Java干貨知識。

知了堂Java|Java基礎面試題(三)的評論 (共 條)

分享到微博請遵守國家法律
清新县| 漯河市| 丘北县| 唐河县| 潜山县| 塔城市| 鹿泉市| 沽源县| 诏安县| 丘北县| 庆阳市| 武平县| 无为县| 宁阳县| 双江| 陆河县| 江永县| 牡丹江市| 余干县| 陕西省| 浑源县| 大新县| 丽江市| 崇礼县| 东宁县| 巩义市| 洛川县| 镇原县| 两当县| 宁远县| 肃北| 大邑县| 文水县| 石阡县| 常宁市| 津南区| 吉安市| 商城县| 龙游县| 通州区| 保山市|