java基本数据类型范围
1. 數(shù)據(jù)類型范圍
整型:
byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字節(jié)。Byte。末尾加B
short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字節(jié)。Short。末尾加S
有符號int:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字節(jié)。Integer。
無符號int:0~2^32-1。
long:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807。8字節(jié)。Long。末尾加L。(也可以不加L)
浮點型:
float:4字節(jié)。Float。末尾加F。(也可以不加F)
double:8字節(jié)。Double。
字符型:
char:2字節(jié)。Character。
布爾型:
boolean:Boolean。
2. 類型轉(zhuǎn)換
boolean類型與其他基本類型不能進行類型的轉(zhuǎn)換(既不能進行自動類型的提升,也不能強制類型轉(zhuǎn)換), 否則,將編譯出錯。
byte型不能自動類型提升到char,char和short直接也不會發(fā)生自動類型提升(因為負數(shù)的問題),同時,byte當然可以直接提升到short型。
當對小于int的數(shù)據(jù)類型(byte, char, short)進行運算時,首先會把這些類型的變量值強制轉(zhuǎn)為int類型進行計算,最后會得到int類型的值。因此,如果把2個short類型的值相加,最后得到的結(jié)果是int類型,如果需要得到short類型的結(jié)果,就必須顯示地運算結(jié)果轉(zhuǎn)為short類型。
1 //編譯出錯。正確的寫法是:short s1 = 1;s1 = (short)(s1+1)
2 short s1 = 1;s1 = s1+1;
3 //編譯通過
4 short s1 = 1;s1 += 1;
1.1自動類型轉(zhuǎn)換
eg:double d = 1000;
自動類型轉(zhuǎn)換
范圍大的數(shù)據(jù)類型 變量 = 范圍小的數(shù)據(jù)
自動類型轉(zhuǎn)換,數(shù)據(jù)值的數(shù)學(xué)意義上的大小是不變的。
強制轉(zhuǎn)換
范圍小的數(shù)據(jù)類型 變量 = (范圍小的數(shù)據(jù)類型)范圍大的數(shù)據(jù)
eg:int i = (int)6.718
強制類型轉(zhuǎn)換,數(shù)據(jù)值的數(shù)學(xué)意義上的大小會被改變。
**
3. 不同數(shù)據(jù)類型的運算
1+‘1’+1+1+“0”,請問等于多少
我就開始從前面一個一個測試:
控制臺輸出:50,那說明‘1’就表示49,在ascii碼表里里面可以查到字符1對應(yīng)的10進制ascii值為49,”0“表示在后面拼接一個字符0,這樣就很容易知道結(jié)果了。
當我換了位置重新測試一下又發(fā)現(xiàn)了問題:
public class DateType {public static void main(String[] args) {System.out.println("1"+1+1);} } public class DateType {public static void main(String[] args) {System.out.println("1"+1+'1');} }控制臺輸出結(jié)果都是:111,先開始我也為第二結(jié)果為1149
說明第一個為字符時,后面不管什么類型都是字符,還有最后輸出的結(jié)果的數(shù)據(jù)類型都是字符類型。
總結(jié):不同的數(shù)據(jù)類型運算,從左往右計算,如果是整形,正常的10進制計算,遇到字符轉(zhuǎn)成10進制的ascii碼值計算,有字符就直接拼接字符,遇到字符的,后面都是字符,就沒必要轉(zhuǎn)化。
再看看下面
System.out.println(1.1 + 1);// 2.1
System.out.println(1 + 1.1);// 2.1
System.out.println(1 + 0.3);// 1.3
System.out.println(0.3 + 0.03);// 0.32999999999999996
System.out.println(1 + 0.3 + 0.33);// 1.6300000000000001
System.out.println(0.3 + 0.3);// 0.6
System.out.println(1 / 0.5 + 2);// 4.0
System.out.println(“9” + 1 / 0.5);// 92.0
System.out.println(“9” + 1 / 0.5 + 5);// 92.05
System.out.println(1 / 0.5 + 5 + “9”);// 7.09
System.out.println(1 / 0.3);// 3.3333333333333335
System.out.println(3 * 0.3);// 0.8999999999999999
System.out.println(3 * 0.4);// 1.2000000000000002
System.out.println(0.3 * 0.3);// 0.09
不難發(fā)現(xiàn):
基本類型(除了boolean外)可以自動轉(zhuǎn)換的,轉(zhuǎn)換形式為:byte,short,char – int --long–float–double這就是自動轉(zhuǎn)換的順序了,其中byte,short,char在運算時是自動轉(zhuǎn)換為int型的,而int與long運算時自動轉(zhuǎn)換為long型。從上可知,float與double運算時是自動轉(zhuǎn)換為double再進行計算的,int與float運算時先轉(zhuǎn)換為float再運算。也就是說,表述范圍小的可以自動轉(zhuǎn)換為表述范圍大的,(表述范圍不是指類型的大小)其次,如果你要得到某一類型的數(shù)值時,也可以通過強制轉(zhuǎn)換來實現(xiàn)
//數(shù)據(jù)轉(zhuǎn)換的類型有兩種,第一種是顯式轉(zhuǎn)換,第二種是隱式轉(zhuǎn)換
//低精度類型的數(shù)據(jù)像高精度類型的數(shù)據(jù)轉(zhuǎn)換的時候,永遠不會溢出,并且總是成功的。
//高精度類型的數(shù)據(jù)向低精度類型的數(shù)據(jù)轉(zhuǎn)換的時候,則必然會有信息丟失,有可能失敗。
//從低級向高級類型的數(shù)據(jù)轉(zhuǎn)換,系統(tǒng)會自動執(zhí)行,這種類型為隱式轉(zhuǎn)換。
//以下數(shù)據(jù)類型涉及到數(shù)據(jù)轉(zhuǎn)換不包括字符類型和邏輯類型:這些類型精度由高到低是:byte,short,int,long,flaot,double
//把高精度的數(shù)據(jù)賦值給低精度變量的數(shù)據(jù)時,必須使用顯式抓換。
//執(zhí)行顯式轉(zhuǎn)換的時候,可能會導(dǎo)致精度損失,只要是boolean類型以外的數(shù)據(jù)類型都可以顯式轉(zhuǎn)換的方式達到
總結(jié)
以上是生活随笔為你收集整理的java基本数据类型范围的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零基础学计算机编程教学视频教程,IT编程
- 下一篇: 体重 年龄 性别 身高 预测鞋码_【新手