java类型转换面试题_JavaSE:数据类型之间的转换(附常见面试题)
數據類型之間的轉換
分為以下幾種情況:
1)低級到高級的自動類型轉換;
2)高級到低級的強制類型轉換(會導致溢出或丟失精度);
3)基本類型向類類型轉換;
4)基本類型向字符串的轉換;
5)類類型向字符串轉換
基本數據類型之間的轉換規則
1.在一個雙操作數以及位運算等算術運算式中,會根據操作數的類型將低級的數據類型自動轉換為高級的數據類型,分為以下幾種情況:
1)只要兩個操作數中有一個是double類型的,另一個將會被轉換成double類型,并且結果也是double類型;
2)只要兩個操作數中有一個是float類型的,另一個將會被轉換成float類型,并且結果也是float類型;
3)只要兩個操作數中有一個是long類型的,另一個將會被轉換成long類型,并且結果也是long類型;
4)兩個操作數(包括byte、short、int、char)都將會被轉換成int類型,并且結果也是int類型。
2.?如果低級類型為char型,向高級類型(整型)轉換時,會轉換為對應ASCII碼值,再做其它類型的自動轉換。
3.?對于byte,short,char三種類型而言,他們是平級的,因此不能相互自動轉換,可以使用下述的強制類型轉換。?如:
short i=99 ;
char c=(char)i;
System.out.println("output:"+c);
4.?不能在布爾值和任何數字類型間強制類型轉換;
5.?不同級別數據類型間的強制轉換,可能會導致溢出或精度的下降。
6.?當字節類型變量參與運算,java作自動數據運算類型的提升,將其轉換為int類型。例如:
byte b;
b=3;
b=(byte)(b*3);//必須聲明byte。
包裝數據類型與基本數據類型之間的轉換
簡單類型的變量轉換為相應的包裝類,可以利用包裝類的構造函數。即:Boolean(boolean?value)、Character(char?value)、Integer(int?value)、Long(long?value)、Float(float?value)、Double(double?value)
而在各個包裝類中,總有形為××Value()的方法,來得到其對應的簡單類型數據。利用這種方法,也可以實現不同數值型變量間的轉換,例如,對于一個雙精度實型類,intValue()可以得到其對應的整型變量,而doubleValue()可以得到其對應的雙精度實型變量。
有了基本類型之后為什么還要有包裝器類型呢?我們知道Java是一個面相對象的編程語言,基本類型并不具有對象的性質,為了讓基本類型也具有對象的特征,就出現了包裝類型(如我們在使用集合類型Collection時就一定要使用包裝類型而非基本類型),它相當于將基本類型“包裝起來”,使得它具有了對象的性質,并且為其添加了屬性和方法,豐富了基本類型的操作。
另外當需要往ArrayList,HashMap中放東西時,像int,double這種基本類型是放不進去的,因為容器都是裝object的,這是就需要這些基本類型的包裝器類了
1.字符串與其它類型間的轉換
⑴其它類型向字符串的轉換
①調用類的串轉換方法:X.toString();
②自動轉換:X+“”;
③使用String的方法:String.volueOf(X);
⑵字符串作為值,向其它類型的轉換
①先轉換成相應的封裝器實例,再調用對應的方法轉換成其它類型
例如,字符中“32.1”轉換double型的值的格式為:new?Float(“32.1”).doubleValue()。也可以用:Double.valueOf(“32.1”).doubleValue()
②靜態parseXXX方法
String s = "1";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
③Character的getNumericValue(char ch)方法
具體可查閱api。
轉換實例
1)基本類型向類類型轉換
正向轉換:通過類包裝器來new出一個新的類類型的變量
Integer a= new Integer(2);
反向轉換:通過類包裝器來轉換
int b=a.intValue();
通過類包裝器——>基本數據類型
int?i=Integer.parseInt(“123”)
說明:此方法只能適用于字符串轉化成整型變量
float?f=Float.valueOf(“123”).floatValue()
說明:上例是將一個字符串轉化成一個Float對象,然后再調用這個對象的floatValue()方法返回其對應的float數值。
boolean?b=Boolean.valueOf(“123”).booleanValue()
說明:上例是將一個字符串轉化成一個Boolean對象,然后再調用這個對象的booleanValue()方法返回其對應的boolean數值。
double?d=Double.valueOf(“123”).doubleValue()
說明:上例是將一個字符串轉化成一個Double對象,然后再調用這個對象的doubleValue()方法返回其對應的double數值。
long?l=Long.valueOf(“123”).longValue()
說明:上例是將一個字符串轉化成一個Long對象,然后再調用這個對象的longValue()方法返回其對應的long數值。
char=Character.valueOf(“123”).charValue()
說明:上例是將一個字符串轉化成一個Character對象,然后再調用這個對象的charValue()方法返回其對應的char數值。
2)基本類型向字符串的轉換
正向轉換:
如下:
System.out.println(""+2+3);//?“""”把2轉成字符串操作;
System.out.println(2+3);???//?不存在轉換。
System.out.println(2+3+"");//?前兩個數值相加后,被“""”轉成字符串。
System.out.println(2+""+3);//?同第一個。
輸出顯示為:23,5,5,23
3)類類型向字符串轉換
正向轉換:因為每個類都是object類的子類,而所有的object類都有一個toString()函數,所以通過toString()函數來轉換即可
反向轉換:通過類包裝器new出一個新的類類型的變量
int?i=Integer.valueOf(“123”).intValue()
說明:上例是將一個字符串轉化成一個Integer對象,然后再調用這個對象的intValue()方法返回其對應的int數值。
float?f=Float.valueOf(“123”).floatValue()
說明:上例是將一個字符串轉化成一個Float對象,然后再調用這個對象的floatValue()方法返回其對應的float數值。
boolean?b=Boolean.valueOf(“123”).booleanValue()
說明:上例是將一個字符串轉化成一個Boolean對象,然后再調用這個對象的booleanValue()方法返回其對應的boolean數值。
double?d=Double.valueOf(“123”).doubleValue()
說明:上例是將一個字符串轉化成一個Double對象,然后再調用這個對象的doubleValue()方法返回其對應的double數值。
long?l=Long.valueOf(“123”).longValue()
說明:上例是將一個字符串轉化成一個Long對象,然后再調用這個對象的longValue()方法返回其對應的long數值。
char=Character.valueOf(“123”).charValue()
說明:上例是將一個字符串轉化成一個Character對象,然后再調用這個對象的charValue()方法返回其對應的char數值。
常見面試題
1、short?s1?=?1;?s1?=?s1?+?1;有什么錯??short?s1?=?1;?s1?+=1;有什么錯?
答:對于short?s1=1;s1=s1+1來說,在s1+1運算時會自動提升表達式的類型為int,那么將int賦予給short類型的變量s1會出現類型轉換錯誤。
對于short?s1=1;s1+=1來說?+=是java語言規定的運算符,java編譯器會對它進行特殊處理,因此可以正確編譯。
2、char類型變量能不能儲存一個中文的漢子,為什么?
char類型變量是用來儲存Unicode編碼的字符的,unicode字符集包含了漢字,所以char類型當然可以存儲漢字的,還有一種特殊情況就是某個生僻字沒有包含在
unicode編碼字符集中,那么就char類型就不能存儲該生僻字。
3、Integer和int的區別
int是java的8種內置的原始數據類型。Java為每個原始類型都提供了一個封裝類,Integer就是int的封裝類,int變量的默認值為0,Integer變量的默認值為null
Integer類內提供了一些關于整數操作的一些方法,例如上文用到的表示整數的最大值和最小值。
4、switch語句能否作用在byte上,能否作用在long上,能否作用在string上?
byte的存儲范圍小于int,可以向int類型進行隱式轉換,所以switch可以作用在byte上
long的存儲范圍大于int,不能向int進行隱式轉換,只能強制轉換,所以switch不可以作用在long上
switch()變量類型只能是int、short、char、byte和enum類型
case后面只能是常量,可以是運算表達式,但一定要符合正確的類型。不能是變量,即便變量在之前進行了賦值,JVM依然會報錯。
string在1.7版本之前不可以,1.7版本之后switch就可以作用在string上了。
不可變對象指對象一旦被創建,狀態就不能再改變。任何修改都會創建一個新的對象,如String、Integer及其它包裝類。
indexOf():查找一個字符串中,第一次出現指定字符串的位置。
valueOf()?方法用于返回給定參數的原生?Number?對象值,參數可以是原生數據類型,?String等。
該方法是靜態方法。該方法可以接收兩個參數一個是字符串,一個是基數,用于類型轉換。
總結
以上是生活随笔為你收集整理的java类型转换面试题_JavaSE:数据类型之间的转换(附常见面试题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蹦神克星 高悬赏
- 下一篇: mysql常见增量恢复方式_MySQL