天天看點

java int 轉long_java面試題(基礎文法)

java int 轉long_java面試題(基礎文法)
一、類型轉換題
  1. Which ofthe following are legal lines ofcode?( 下列哪些代碼是合法的?)

(a) int w=(int)888.8

(b) byte x=(byte)1000L

(c )long y=(byte)100

(d) byte z=(byte)100L

參考答案:(a)、(b)、(c)、(d)。

分析:

在Java中,整型、實型、字元型被視為簡單的資料類型,這些資料類型由低

到進階分別為:(byte,short,char)int long float double

簡單資料類型之間的轉換又可以分為:

低級到進階的自動類型轉換;

進階到低級的強制類型轉換;

包裝類過渡類型能夠轉換。

1、自動類型轉換

低級變量可以直接轉換為進階變量,下面的語句可以在JAVA中直接通過,代碼如下:

byte b;

int i=b;

long l=b;

f loat f=b;

doubled=b

如果低級類型為char型,向進階類型(整型) 轉換時,會轉換為對應ASCII碼值,代碼如下:

碼如下:

char c='c';

int i=c;

System.out.println("output:"+i);

輸出:

output:99 ;

對于byte、short、char 3種類型而言,它們是平級的,是以不能互相自動轉換,可以使用下述的強制類型轉換,代碼如下:

short i=99;

char c=(char)i;

System.out.printIn("output:"+c) ;

輸出:

output:c

2.強制類型轉換

将進階變量轉換為低級變量時,情況會複雜一些,可以使用強制類型轉換.示例代碼如下:

int i=99;

byte b=(byte)i;

char c=(char)i;

float f=(float)i;

3.包裝類過渡類型轉換

Java 的包裝類将基本資料類型與對象類型在一定程度上統一起來,井提供以下兩個方

面的功能。

将基本類型封裝後當作對象進行操作。

口為基本資料類型提供各種轉換功能。

Java 共有6 個包裝類,分别是Boolean、Character、Integer、Long、Float 和Double。

從字面上就可以看出它們分别對應于boolean、char、int、long、float和double 類型。而String和Daue本身就是類。也就不存在包裝類的概念。

在進行簡單資料類型之間的轉換(自動轉換或強制轉換)時,可以利用包裝類進行過渡。

一般情況下,首先聲明一個變量。然後生成個對應的包裝類,就可以利用包餐類的

各種方法進行類型轉換了。例如,當希望把float型轉換為double型時、示例代碼如下:

float f1=100.00f;

FloatF1=new float(f1);

Double d1=F1.doubleValue();//F1.doubleValue()為Float類的傳回double值型的方法

當希望把double型轉換為int型時,代碼如下所示:

doubled1= 100.00;

DoubleD1=new Double(d1);

int i1=D1.intvalue();

當希望把int型轉換為double型時,自動轉換如下:

int i1=200;

double d1=i1

簡單類型的變量轉換為相應的包裝類,可以利用包裝類的構造函數,如Boolean(boolean

value)、Character(charvalue) 、Integer(int value) 、Long(long value)、Floal (float value)、Double(double value)

而在各個包裝類中,總有形為XXXValue()的方法,來得到其對應的簡單類型資料。利

用這種方法,也可以實作不同數值型變最間的轉換。例如對于一個雙精度實型類,intValue()

可以得到其對應的整型變量,而doubleValue()可以得到其對應的雙精度實型變量。

一個浮點類型資料通過強制類型轉換可以轉換為int類型,這時小數位會被截去,是以

(a) 是正确的。一個長整型數值可以被轉換為byte 類型,如果長整型數大于127 轉換為

byte 類型就會變為-128,是以(b) 和(d) 是正确的。由于長整型數的範圍覆寫byte 類型數範圍,是以(c) 也是正确的。

2. switch語句能否作用在byte上,能否作用在long上,能否作用在String上?

可以作用在byte上,因為byte能自動轉為int;不能作用在long上,long轉int不能自動轉,需要強轉;在jdk1.7以後可以作用在String上..

二、修飾符相關的考題

編譯并運作下面代碼,請選擇描述正确的項。

public class XiuShiFu{

int i =10;

private static float pi=3.0f;//(1)

public static void main(string [] args) {

public inti= 20;//(2)

final doubled= 4.0d;//(3)

System.out.println(i+d +pi) ;} }

(a) 編譯正确,輸出結果28.0

(b) 編譯錯誤,(1) 處有錯誤

(c) 編譯錯誤,(2) 處有錯誤

(d) 編譯錯誤,(3) 處有錯誤

(e) 編譯正确,輸出結果18.0

參考答案(c)

分析:

Java語言定義了public、protected、private、abstract、和final這6個常用修飾符詞外,還定義了4個不太常用的修飾符,下面是對這10個java修飾符的介紹。

1、pubic

使用對象: 類、接口、成員。

介紹:無論所屬的包定義在哪,該類(接口、成員)都是可通路的。

2、private

使用對象: 成員。

介紹: 成員隻可以在定義它的類中被通路。

3、static

使用對象: 類、方法、變量、初始化函數。

介紹:static修辭的内部類是一個項級類,它和類包含的成員是不相關的。靜态方法是類方法,被指向到所屬的類面不是類的執行個體。靜态變量是類變量,無論該變量所在的類建立了多少執行個體,該變量隻存在一個執行個體被指向到所屬的類而不是類的執行個體。初始化函數是

在裝載類時執行的,面不是在建立執行個體時執行的。

4、final

使用對象:類、方法、變量。

介紹:被定又成final的類不允許出現子類,不能被覆寫(不應用于動态查詢),變量值不允許被修改。

5、abstract

使用對象:類、接口、方法。

介紹:abstract類中包括沒有實作的方法。不能被執行個體化。abstract 方法的方法體為空

該方法的實作在子類中被定義,并且包含一個abstract方法的類必須是一個abstact類。

6、protected

使用對象: 成員

介紹:protected 成員隻能在定義它的包中被通路,如果在其他包中被通路,則實作這個

方法的類必須是該成員所屬類的子類。

7、native

使用對象: 成員。

介紹: 與操作平台相關,定義時并不定義其方法,方法被個外部的庫實作。

8、synchronized

使用對象: 方法。

介紹: 對于一個靜态的方法,在執行之前JVM把它所在的類鎖定;對于一個非靜态類

的方法,執行前把某個特定對象執行個體鎖定。

9、volatile

使用對象:變量。

介紹:因為異步線程可以通路變量,是以有些優化操作是一定不能作用在變量上的。

volatile有時可以代替synchronized.

10、transient

使用對象: 變量。

介紹。變量不是對象持久狀态的一部分,不應該把變量和對象一起串起

三、static靜态變量相關考題

運作下面程式,請選擇輸出結果

public class x(

private static int a

pubilc static void main(String[ ] args) {

modify(a)

System. out.println(a);

}

public static void modify(int a) {

a++;

}

(a) 0

(b) 1

(0) 2

(d) 3

參考答案:(a)

分析:

類的靜态變量a在modify()方法中并沒有被改變,而是改變了modify() 方法的參數。(就近原則)如果将上述代碼修改如下:

public class x(

private static int a;

pubilc static void main(String[ ] args) {

modify(a)

System. out.println(a);

}

public static void modify(int b) {

a++;

}

那麼輸出結果為1,但是面試題中靜态變量a的值并沒有改變,是以應該輸出為0。

四、考察構造函數

下面程式代碼運作結果是什麼?

class MyTest extends Test {

public MyTest() {

system.out.printin("S2");

public class Test {

public static void main(String args[]) {

new myTest( );

public Test() {

System.out.println("S1") ;

}

}

選擇正确的答案:

(a) S1。

(b) S2。

(c) S1S2.

(d) S2S1。

考點:考察求職者對于Java的構造函數運作順序的掌握和了解

出現頻率:★★★★

【面試分析】父類的構造函數是先于子類的構造函數運作的。

參考答案: (c)。

五、int和Integer的差別

1、Integer是int的包裝類,int則是java的一種基本資料類型

2、Integer變量必須執行個體化後才能使用,而int變量不需要

3、Integer實際是對象的引用,當new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲資料值

4、Integer的預設值是null,int的預設值是0

延伸:

關于Integer和int的比較

1、由于Integer變量實際上是對一個Integer對象的引用,是以兩個通過new生成的Integer變量永遠是不相等的(因為new生成的是兩個對象,其記憶體位址不同)。

Integer i = new Integer(100);

Integer j = new Integer(100);

System.out.print(i == j); //false

2、Integer變量和int變量比較時,隻要兩個變量的值是向等的,則結果為true(因為包裝類Integer和基本資料類型int比較時,java會自動拆包裝為int,然後進行比較,實際上就變為兩個int變量的比較)

Integer i = new Integer(100);

int j = 100;

System.out.print(i == j); //true

3、非new生成的Integer變量和new Integer()生成的變量比較時,結果為false。(因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中建立的對象,兩者在記憶體中的位址不同)

Integer i = new Integer(100);

Integer j = 100;

System.out.print(i == j); //false

4、對于兩個非new生成的Integer對象,進行比較時,如果兩個變量的值在區間-128到127之間,則比較結果為true,如果兩個變量的值不在此區間,則比較結果為false

Integer i = 100;

Integer j = 100;

System.out.print(i == j); //true

Integer i = 128;

Integer j = 128;

System.out.print(i == j); //false

對于第4條的原因:

java在編譯Integer i = 100 ;時,會翻譯成為Integer i = Integer.valueOf(100);,而java API中對Integer類型的valueOf的定義如下:

public static Integer valueOf(int i){

assert IntegerCache.high >= 127;

if (i >= IntegerCache.low && i <= IntegerCache.high){

return IntegerCache.cache[i + (-IntegerCache.low)];

}

return new Integer(i);

}

java對于-128到127之間的數,會進行緩存,Integer i = 127時,會将127進行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了