华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java面試題 >> 文章內(nèi)容

java面試題及答案:第三部分

來源:中華考試網(wǎng)  [2020年9月24日]  【

  break和continue的區(qū)別?

  ● break和continue 都是用來控制循環(huán)的語句。

  ● break 用于完全結(jié)束一個循環(huán),跳出循環(huán)體執(zhí)行循環(huán)后面的語句。

  continue 用于跳過本次循環(huán),繼續(xù)下次循環(huán)。

  String s = "Hello";s = s + " world!";這兩行代碼執(zhí)行后,原始的 String 對象中的內(nèi)容變了沒有?

  沒有。

  因為 String被設(shè)計成不可變類,所以它的所有對象都是不可變對象。

  在這段代碼中,s原先指向一個 String 對象,內(nèi)容是 "Hello",然后我們對 s 進行了“+”操作,那么 s 所指向的那個對象是否發(fā)生了改變呢?

  答案是沒有。這時s不指向原來那個對象了,而指向了另一個 String 對象,內(nèi)容為"Hello world!",原來那個對象還存在于內(nèi)存之中,只是 s 這個引用變量不再指向它了。

  通過上面的說明,我們很容易導(dǎo)出另一個結(jié)論,如果經(jīng)常對字符串進行各種各樣的修改,或者說,不可預(yù)見的修改,那么使用 String 來代表字符串的話會引起很大的內(nèi)存開銷。因為 String 對象建立之后不能再改變,所以對于每一個不同的字符串,都需要一個 String 對象來表示。這時,應(yīng)該考慮使用 StringBuffer/StringBuilder類,它允許修改,而不是每個不同的字符串都要生成一個新的對象。并且,這兩種類的對象轉(zhuǎn)換十分容易。同時,我們還可以知道,如果要使用內(nèi)容相同的字符串,不必每次都 new 一個 String。例如我們要在構(gòu)造器中對一個名叫 s 的 String 引用變量進行初始化,把它設(shè)置為初始值,應(yīng)當(dāng)這樣做:

  s = new String("動力節(jié)點,口口相傳的Java黃埔軍校");

  而不是這樣做:

  s = new String("動力節(jié)點,口口相傳的Java黃埔軍校");

  后者每次都會調(diào)用構(gòu)造器,生成新對象,性能低下且內(nèi)存開銷大,并且沒有意義,因為 String 對象不可改變,所以對于內(nèi)容相同的字符串,只要一個 String 對象來表示就可以了。也就說,多次調(diào)用上面的構(gòu)造器創(chuàng)建多個對象,他們的 String 類型屬性 s 都指向同一個對象。

  上面的結(jié)論還基于這樣一個事實:對于字符串常量,如果內(nèi)容相同,Java 認(rèn)為它們代表同一個 String 對象。而用關(guān)鍵字 new 調(diào)用構(gòu)造器,總是會創(chuàng)建一個新的對象,無論內(nèi)容是否相同。

  至于為什么要把 String 類設(shè)計成不可變類,是它的用途決定的。其實不只String,很多 Java 標(biāo)準(zhǔn)類庫中的類都是不可變的。在開發(fā)一個系統(tǒng)的時候,我們有時候也需要設(shè)計不可變類,來傳遞一組相關(guān)的值,這也是面向?qū)ο笏枷氲捏w現(xiàn)。不可變類有一些優(yōu)點,比如因為它的對象是只讀的,所以多線程并發(fā)訪問也不會有任何問題。當(dāng)然也有一些缺點,比如每個不同的狀態(tài)都要一個對象來代表,可能會造成性能上的問題。所以 Java 標(biāo)準(zhǔn)類庫還提供了一個可變版本,即 StringBuffer。

  填寫下面表單即可預(yù)約申請免費試聽!害怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國推薦就業(yè)!

預(yù)約申請免費聽課

  • 地區(qū):
  • 姓名:
  • 手機:
責(zé)編:yangliu1997
  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學(xué)歷考試
田东县| 迭部县| 平泉县| 石家庄市| 玛曲县| 和硕县| 郎溪县| 志丹县| 香格里拉县| 扬中市| 北流市| 紫云| 安丘市| 台山市| 西青区| 临湘市| 莱西市| 宜良县| 手游| 神农架林区| 安化县| 昔阳县| 洛隆县| 托克逊县| 米泉市| 林芝县| 西充县| 开平市| 龙山县| 铜川市| 贵州省| 安化县| 察雅县| 紫金县| 新闻| 沙坪坝区| 昭通市| 曲沃县| 景德镇市| 五家渠市| 叶城县|