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