【JAVA】【基础类型】Java中的基础类型定义&转换&运算符
一、Java中的基本數(shù)據(jù)類型
java中有8種基本數(shù)據(jù)類型,包括:6種數(shù)字類型、1種字符類型、1種布爾類型:
1) boolean:1個bit。true/false,java中默認(rèn)值false
2) char:2Byte的Unicode 字符(Java采用UniCode,2個字節(jié)來表示一個字符),java中默認(rèn)值'u0000'
3) byte:1Byte,有符號數(shù),java中默認(rèn)值0
4) short:2Byte,有符號數(shù),java中默認(rèn)值0
5) int:4Byte,有符號數(shù),java中默認(rèn)值0
6) long:8Byte,有符號數(shù),java中默認(rèn)值0
7) float:4Byte,浮點數(shù),java中默認(rèn)值0.0f
8) double:8Byte,浮點數(shù),java中默認(rèn)值0.0d
Java中的基本類型的字節(jié)長度是和平臺無關(guān)的。
1、boolean類型
注:java中的boolean類型使用比其他語言嚴(yán)格的多,boolean類型即不能是整數(shù)也不能是對象。如:
Object 0 = new Object();
int i = 1;
if(o)、if(i)使用方式都是不合法的。需要使用if(o != null)
2、字符型
java中的字符型,支持三種方式表達(dá):
(1)把字符放到單引號內(nèi)。
(2)字符對應(yīng)的Assic數(shù)值,可以是十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制。
(3)也可使用unicode轉(zhuǎn)義序列。
(4)也可使用特殊轉(zhuǎn)義字符。
如:
Tab鍵:' '
nul:'000’
aleph:'u05D0’
slash:'\’
更多轉(zhuǎn)義字符:
退格符
水平制表符
換行符
f 換頁符
回車符
” 雙引號
’ 單引號
\ 反斜杠
xxx xxx是8進(jìn)制,表示Latin-1字符
uxxxx xxxx是十六進(jìn)展數(shù),標(biāo)識Unicode字符。
(1)其中Unicode碼采用uxxxx形式表示一個字符。這種表示法只限于碼點在u0000~uFFFF之間的字符。超出這個范圍的字符,必須用兩個雙字節(jié)的形式表示,如:uD842uDFB7。
(2)Unicode碼不能省略前面的幾位0,如:'u20'在java中會報錯。
3、整數(shù)類型
byte、short、int、long四種類型,每種類型都是有符號,只是標(biāo)識范圍不同。
支持十進(jìn)制、十六進(jìn)制、八進(jìn)制、二進(jìn)制標(biāo)識。
0x 0X開頭,表示十六進(jìn)制
0b開頭,表示二進(jìn)制
0開頭,標(biāo)識八進(jìn)制
123L 表示是Long類型數(shù)字。
如果運算結(jié)果超出了變量范圍,會如何?
Java中不會上溢或下溢,而是直接回繞,如:
byte b1 = 127, b2 = 1; //byte類型的最大值是127
byte sum = (byte)(b1 + b2); //加法運算的結(jié)果直接回繞到-128,即byte類型的最小值
如果發(fā)生了這種情況,Java編譯器和解釋器都不會發(fā)出任何形式的警告。進(jìn)行整數(shù)運算時,必須確保使用的類型取值范圍能滿足計算需要。
4、浮點類型
包含float、double
浮點數(shù)的字面表示格式,如:
123.45
1.1
.12
1e-6
默認(rèn)字面的浮點數(shù)都是double的,如果需要使用float的字面數(shù),需要添加f標(biāo)識。如:123.45f
浮點數(shù)比較的方法:Math.abs(a - b) < 1E-6F
所以,如下采用浮點數(shù)作為循環(huán)變量,在Java中實際會導(dǎo)致死循環(huán)(float和dobule不能作為for語句的循環(huán)變量)。如:
for(float f =100000000;f<100000010;f++){
System.out.println(f);
}
實際測試是死循環(huán)。
注:如果浮點數(shù)的運算結(jié)果超出了float或double的范圍上限,得到的是無窮大。如果浮點數(shù)運算結(jié)果超出了float或double的范圍下限,得到的是無窮小。
浮點數(shù)運算中有個特殊值NaN,標(biāo)識Not a number,如果浮點數(shù)運算不合法(如:0.0/0.0),得到的是NaN。
Java 浮點數(shù)類型能處理到無窮大的上溢以及到零的下溢,因此浮點數(shù)運算從不拋出異常, 就算執(zhí)行非法運算也沒事,例如零除以零,或計算負(fù)數(shù)的平方根。
注意:禁止嘗試與NaN進(jìn)行比較運算,相等操作使用double或float的isNaN方法。
NaN(Not a Number,非數(shù)值)是無序的,
(1)當(dāng)一個或兩個操作數(shù)是NaN時,數(shù)值比較符<、<=、>、>=會返回false。
(2)當(dāng)任意一個操作數(shù)是NaN,==運算符會返回false
(3)當(dāng)任意一個操作數(shù)是NaN時,!=運算符會返回true。
因為無序的特性常常會導(dǎo)致意外結(jié)果,所以不能直接與NaN進(jìn)行比較。使用方法Double.isNaN(result)方法來檢查result是否為一個NaN數(shù)值,可以獲得正確的結(jié)果。
二、java中基本數(shù)據(jù)類型之間的轉(zhuǎn)換
1、自動類型轉(zhuǎn)換(隱式轉(zhuǎn)換):
Java的基本類型運作過程中可以混合使用,Java會自動進(jìn)行類型轉(zhuǎn)換:byte/short/char →int → long → float → double
什么情況下不能隱式轉(zhuǎn)換:如果會丟失精度,則不能隱式轉(zhuǎn)化,比如long轉(zhuǎn)int或者double轉(zhuǎn)long這種。編譯器會強制我們使用強制轉(zhuǎn)化。
2、強制類型轉(zhuǎn)換:
樣例:
int i = 3;
byte b = (byte)i;
在java中,允許:
1)整數(shù)和浮點數(shù)之間相互轉(zhuǎn)換
2)字符型 和 整數(shù)/浮點數(shù)之間相互轉(zhuǎn)換
3)boolean類型不能相互轉(zhuǎn)換
放大轉(zhuǎn)換:把某種類型轉(zhuǎn)換為取值范圍更廣的類型。如:int轉(zhuǎn)換為double
縮小轉(zhuǎn)換:把某種類型轉(zhuǎn)換為取值范圍沒那個廣的類型。縮小轉(zhuǎn)換可能會導(dǎo)致丟失數(shù)據(jù),是不安全的。所以縮小轉(zhuǎn)換時java編譯器會發(fā)生告警。
浮點數(shù)轉(zhuǎn)換為整數(shù),浮點數(shù)的小數(shù)部分會被直接截掉,而不是四舍五入。
如果采用其他的舍入方式,請使用如下Java中的數(shù)據(jù)運算封裝類的方法:Math.round()、Math.floor()、Math.ceil()。
字符和整數(shù)轉(zhuǎn)換,如下很有趣:
short s = (short) 0xffff; // 這些比特表示數(shù)字-1
char c = 'uffff'; // 還是這些比特,表示一個Unicode字符
int i1 = s; // 把short類型轉(zhuǎn)換成int類型,得到的是-1
int i2 = c; // 把字符轉(zhuǎn)換成int類型,得到的是65535
三、java中運算符
1、運算符種類
類同C、C++。
1) 算術(shù)運算符
+ - * / % ++ --
2) 條件運算符:
== != > < >= <=
3) 位運算符:
Java中位運算符應(yīng)用于char、byte、short、int、long類型。
& | ^ ~ << >> >>>
4) 邏輯運算符:
&& || !
5) 賦值運算符
= += -= *= /= (%)= <<= >>= &= ^= |=
6) 條件運算符
? :
樣例:a>b?a:b;
7) instanceof運算符:
檢查該對象是否是一個特定類型(Class類型或接口類型)。
如:String name="James";
boolean result= name instanceof String; //name是String類型,所以返回true
8) 特殊運算符
lambda表達(dá)式(->)
2、運算符優(yōu)先級
注:Java 解釋器計算表達(dá)式時,會按照表達(dá)式中的括號、運算符的優(yōu)先級和結(jié)合性指定的順序運算。不過,在任何運算之前,解釋器會先計算運算符的操作數(shù)。
如:
int a = 2;
int v = ++a + ++a * ++a;
java解釋器會先計算操作數(shù),所以這個表達(dá)式實際上是:3 + 4 * 5,結(jié)果 為 23。
3、Java中運算符的返回值類型
參與運算的任一操作數(shù)是dobule類型,運算結(jié)果返回值就是double類型。否則:
參與運算的任意操作數(shù)是float類型,運算結(jié)果返回值就是float類型。否則:
參與運算的任意操作數(shù)是long類型,運算結(jié)果返回值就是long類型。否則:
運算返回結(jié)果值都是int類型,即使參與運算的操作數(shù)是byte、short、char。
相等、邏輯運算符返回boolean型。
So、如下例子就很有趣:
byte b1 = 5;
byte b2 = 1;
short s1 = b1 + b2; //編譯報錯。因為b1 + b2兩個byte類型相加,最終結(jié)果是int類型。int類型不能默認(rèn)轉(zhuǎn)換為short類型。
short b1=5;
short b2=1;
short b3 = b1 + b2; //編譯報錯。因為b1 + b2兩個short類型相加,最終結(jié)果是int類型。 從int轉(zhuǎn)換到short可能會有損失
總結(jié)
以上是生活随笔為你收集整理的【JAVA】【基础类型】Java中的基础类型定义&转换&运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS APP 安全测试
- 下一篇: xfce不小心禁用了鼠标