日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java知識體系冷門篇

 碼農(nóng)9527 2021-12-15

通常在面試中,面試官會提出一些冷的基礎(chǔ)知識,比如基礎(chǔ)數(shù)據(jù)類型占用的字節(jié)數(shù),或者Unicode和UTF-8的區(qū)別,所以很多考生會回答錯誤。此外,在正常編碼過程中,除法經(jīng)常用于計算。例如,對于一個長度為100萬的List中的所有元素進(jìn)行除16操作,CPU對element的計算將快于element/16操作

Java知識體系冷門篇

  因此,本文總結(jié)了一些容易被遺忘的基知識,適合有一定Java基礎(chǔ)的技術(shù)人員閱讀。有些內(nèi)容可能對初學(xué)者來說比較困難,希望能幫助大家輕松應(yīng)對面試官的基本技術(shù)問題,提高編碼效率。

  1、Java中的基本數(shù)據(jù)類型和內(nèi)存大小。

  (1)整形

  byte1字節(jié)。

  short2字節(jié)。

  int4字節(jié)。

  long8字節(jié)。

  (2)浮點(diǎn)型。

  float4字節(jié)。

  double8字節(jié)。

  (3)字符類型。

  char2字節(jié)(Unicode-16)

  (4)布爾類型。

  布爾型boolean很特別。雖然Java虛擬機(jī)定義了boolean類型,但虛擬機(jī)對boolean類型的支持有限,沒有為boolean值單獨(dú)設(shè)計JVM指令。編譯后,操作布爾值的表達(dá)式使用JVM的int數(shù)據(jù)類型,即占用4個字節(jié)。

  JVM不會直接支持boolean數(shù)組。boolean數(shù)組編譯后,其元素采用byte數(shù)據(jù)類型,0表示false,1表示true,即boolean數(shù)組的元素只占用一個字節(jié)。

  2、UTF-8與Unicode的關(guān)系。

  Unicode是一個統(tǒng)一的編碼標(biāo)準(zhǔn),對所有現(xiàn)有字符進(jìn)行唯一的編碼。在第一個Unicode版本中,使用兩個字節(jié)(16位)來表示一個字符。請注意,這里的字節(jié)不是指計算機(jī)內(nèi)存中的存儲單元,而是數(shù)學(xué)長度單元。然而,Unicode字符在內(nèi)存中存儲的長度需要一個特定的編碼規(guī)則,如UTF-8、因此,Unicode只是一個編碼標(biāo)準(zhǔn),UTF-8是該標(biāo)準(zhǔn)的實(shí)現(xiàn)。UTF-8規(guī)定了Unicode字符在內(nèi)存中占用的空間(英語和中文占用的空間不同,感興趣的讀者可以查閱相關(guān)信息)。

  代碼點(diǎn)是指可用于編碼字符集的數(shù)字。例如,在16位Unicode編碼字符集中,字符A編碼為U+0041、0041為代碼點(diǎn)。

  代碼單元是指字符占用空間的單元。例如,在UTF-32中,一個代碼單元為32位,一個字符占32位,只是使用一個代碼單元,這將消耗大量的內(nèi)存。在UTF-16中,一個代碼單元為16位,值U+0000-U+FFFF代碼對應(yīng)一個字符,每個字符占用一個代碼單元。然而,對于超出此范圍的增加字符的編碼,需要兩個這樣的單元(即32位)。在UTF-8中,一個代碼單元為8位,UTF-8使用一到四個字節(jié)序列編碼Unicode代碼點(diǎn),原則與UTF-32和UTF-16相同。

  3、String字符串常量。

  在Java語言中,一個String字符串的常量對應(yīng)于一個String對象,是不可改變和繼承的(因?yàn)镾tring類被final關(guān)鍵字修改)。Java語言的設(shè)計主要是為了分享字符串的常量(注意字符串的常量,字符串的變量不符合這里提到的規(guī)則),因?yàn)镴VM將字符串的常量放入公共存儲池中,不同的變量可以引用相同的字符串常量。

  上述代碼的運(yùn)行結(jié)果是:true。這表明a和b引用相同的String對象。

  4、基本數(shù)據(jù)類型轉(zhuǎn)換規(guī)則。

  在雙操作數(shù)操作中,低級型將根據(jù)操作數(shù)類型轉(zhuǎn)換為高級型。

  1)只要兩個操作數(shù)中有一個是double類型,另一個將轉(zhuǎn)換為double類型,結(jié)果也是double類型;

  2)只要兩個操作數(shù)中有一個是float類型,另一個將轉(zhuǎn)換為float類型,結(jié)果也是float類型;

  3)只要兩個操作數(shù)中有一個是long類型,另一個將轉(zhuǎn)換為long類型,結(jié)果也是long類型;

  4)兩個操作數(shù)(包括byte、short、int、char)都會轉(zhuǎn)換成int類型,結(jié)果也是int類型。

  5、按值調(diào)用和引用調(diào)用。

  按值調(diào)用表示方法接收調(diào)用人提供的參數(shù)值。根據(jù)引用調(diào)用表示方法,調(diào)用人提供調(diào)用人提供的參數(shù)地址。Java程序設(shè)計語言總是按值調(diào)用。以下是反例代碼:

  上述代碼啟動交換a和b引用的對象,但實(shí)際編譯執(zhí)行會發(fā)現(xiàn)交換不成功。這證明Java不是按引用調(diào)用的,a和b只代表兩個Person對象的值,而不是兩個對象的引用,在參數(shù)傳輸上與int等基本類型的值沒有區(qū)別。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多