最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

知了堂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基礎面試題(三)的評論 (共 條)

分享到微博請遵守國家法律
蓬安县| 田东县| 宜丰县| 连山| 隆尧县| 陇南市| 通渭县| 三河市| 杭锦后旗| 新源县| 湘潭市| 远安县| 隆回县| 敖汉旗| 中阳县| 九龙城区| 鄂尔多斯市| 樟树市| 恩平市| 介休市| 松溪县| 峡江县| 台江县| 平乐县| 绿春县| 郸城县| 工布江达县| 西林县| 彭州市| 青浦区| 柳林县| 武乡县| 信阳市| 贵定县| 锦州市| 辽阳县| 远安县| 灌阳县| 赤壁市| 遵化市| 邓州市|