Java面試題集錦03—數(shù)據(jù)類型及類型轉(zhuǎn)換

09.int和Integer有什么區(qū)別

  • int是基礎(chǔ)數(shù)據(jù)類型,字節(jié)長(zhǎng)度為4,它的創(chuàng)建不會(huì)在堆內(nèi)存中開(kāi)辟空間,一般保存在棧內(nèi)存里,可以用算術(shù)運(yùn)算符進(jìn)行加減乘除等操作。在參數(shù)傳遞的時(shí)候,直接傳遞它的值。
  • Integer是int的包裝類,而本質(zhì)是一個(gè)類,它的創(chuàng)建會(huì)在堆內(nèi)存中開(kāi)辟一塊新的空間。它的含義也是表示一個(gè)整型的數(shù)字,但是,算術(shù)運(yùn)算符不能操作它。在參數(shù)傳遞的時(shí)候,傳遞的是它所代表的對(duì)象的一個(gè)引用。

10.如何用BigDecimal類進(jìn)行精確運(yùn)算

使用BigDecimal類來(lái)進(jìn)行精確的算術(shù)計(jì)算,也就是使用它所提供的一系列的API,主要分為以下步驟:

  1. 用float或double變量構(gòu)建BigDecimal對(duì)象
  2. 通過(guò)調(diào)用BigDecimal的加、減、乘、除等相應(yīng)的方法進(jìn)行算術(shù)運(yùn)算
  3. 把BigDecimal對(duì)象轉(zhuǎn)換成float、double、int等類型
  • 一般來(lái)說(shuō),可以用BigDecimal的構(gòu)造方法或靜態(tài)的valueOf()方法把基本類型的變量或其字符串構(gòu)建成BigDecimal對(duì)象,例如下面的代碼:
    BigDecimal v1 = new BigDecimal(Double.toString(0.05));
    BigDecimal v2 = BigDecimal.valueOf(0.01);
  • 對(duì)于常用的加、減、乘、除運(yùn)算,BigDecimal提供了相應(yīng)的成員方法。它們都是把運(yùn)算的操作對(duì)象作為參數(shù)傳入,與自身進(jìn)行相應(yīng)的計(jì)算,并且返回計(jì)算后的值,代碼如下:
    public BigDecimal add(BigDecimal augend) //加法
    public BigDecimal subtract(BigDecimal augend) //減法
    public BigDecimal multiply(BigDecimal augend) //乘法
    public BigDecimal divide(BigDecimal augend) //除法
  • 進(jìn)行相應(yīng)的計(jì)算以后,可能會(huì)需要將BigDecimal對(duì)象轉(zhuǎn)換成相應(yīng)的基本數(shù)據(jù)類型的變量,就可以調(diào)用floatValue()、doubleValue()等方法。以下是一段使用BigDecimal進(jìn)行運(yùn)算的示例代碼:
    public class BigDecimalTest {
    public static void main(String[] args){
    System.out.println(add(0.05,0.01));
    }
    //提供精確加法計(jì)算的add方法
    public static double add(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.add(b2).doubleValue();
    }
    }

11.Java可以用非0來(lái)代表true嗎
Java不能用非0代表true,也不能用0代表false,只能用布爾型的true和false來(lái)進(jìn)行條件判斷

12.字符串字面量是否自動(dòng)生成一個(gè)String對(duì)象
答案是肯定的。字符串類具有一定的特殊性,JVM在執(zhí)行雙引號(hào)操作符的時(shí)候,會(huì)自動(dòng)創(chuàng)建一個(gè)String對(duì)象,并返回這個(gè)對(duì)象的引用。

13.String、StringBuffer和StringBuilder的區(qū)別
String是不可變的,StringBuffer是可變的;StringBuffer是線程安全的,StringBuilder是非線程安全的。
因而在大部分情況下字符串的拼接速度為:StringBuilder > StringBuffer > String
解釋如下:

  • String是不可變的(通過(guò)ide的debugger可以發(fā)現(xiàn)其屬性大都為final類型),因此每次對(duì)其操作改變其變量值,其實(shí)是生成一個(gè)新的對(duì)象,然后將變量引用指向新對(duì)象;因此速度慢。
  • StringBuffer則不同,對(duì)其操作即直接操作對(duì)象指向的引用,無(wú)需產(chǎn)生新對(duì)象,速度很快;它是線程安全的,在維護(hù)多線程的同步等也會(huì)消耗一點(diǎn)性能。
  • StringBuilder是jdk5之后新增的,其用法與StringBuffer完全一致,但它是線程不安全的,在單線程中最佳,因?yàn)槠洳恍枰S護(hù)線程的安全,因此是最快的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,626評(píng)論 18 399
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,241評(píng)論 0 62
  • 集合框架: 1)特點(diǎn):存儲(chǔ)對(duì)象;長(zhǎng)度可變;存儲(chǔ)對(duì)象的類型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang閱讀 1,385評(píng)論 0 4
  • 相關(guān)概念 面向?qū)ο蟮娜齻€(gè)特征 封裝,繼承,多態(tài).這個(gè)應(yīng)該是人人皆知.有時(shí)候也會(huì)加上抽象. 多態(tài)的好處 允許不同類對(duì)...
    東經(jīng)315度閱讀 2,191評(píng)論 0 8
  • 2016年,主要有以下幾件事: 1、兒子今年考研。愿寶貝夢(mèng)想成真。 2、3月,院子初步完成,房子開(kāi)始裝修。 3、生...
    行吟在畔閱讀 161評(píng)論 0 0

友情鏈接更多精彩內(nèi)容