java基本數據類型和運算符
一、基本數據類型
種類:
- 內置數據類型
- 引用數據類型
1.內置數據類型
一共有八種基本類型,六個數字類型(四個整數類型,兩個浮點型),一個布爾型,一個字符類型。
(1)byte:
byte數據類型是8位、有符號的,以二進制補碼表示的整數;
最小值是-128(-2^7);
最大值是127(2^7-1);
默認值是0;
byte 類型用在大型數組中節約空間,可以代替其他整數類型,因為 byte 變量占用的空間只有 int 類型的四分之一(位數);
例子:byte a = 5,byte b = -100。
(2)short:
short數據類型是16位、有符號的以二進制補碼表示的整數
最小值是-32768(-2^15);
最大值是32767(2^15 - 1);
默認值是0;
short 類型也可以像byte那樣節省空間。一個short 變量占用的空間只有int 類型的二分之一(位數);
例子:short a = 30000,short b = -30000.
(3)int:
int數據類型是32位、有符號的以二進制補碼表示的整數
最小值是-2,147,483,648(-2^31);
最大值是2,147,483,647(2^31 - 1);
默認值是0
一般的整型變量默認為int 類型;
例子:int a = 100000,int b = -203982。
(4)long;
long 數據類型是 64 位、有符號的以二進制補碼表示的整數
最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);
默認值為0L;
這種類型主要使用在需要比較大整數的系統上;
例子: long a = 100000L,Long b = -200000L。
"L"理論上不分大小寫,但是若寫成"l"容易與數字"1"混淆,不容易分辯。所以最好大寫。
解釋為什麽加上L:
example:
long l1 = 10000000000L;
實際上內存中l1只是一個long類型的變量,它存在於向stack(棧)中,數值並不在其中存放,它指向heap(堆)中另一塊真正存放數值的內存,加L的目的就是為了讓heap中也創建一塊long類型所需要的內存,用來來放數值。
以下的float和double同理。
(5)float:
float 數據類型是單精度、32位、符合IEEE 754標準的浮點數
float 在儲存大型浮點數組的時候可節省內存空間;
默認值是 0.0f;
浮點數不能用來表示精確的值,如貨幣(有待理解);
例子:float f1 = 234.5f。
(6)double:
double 數據類型是雙精度、64 位、符合IEEE 754標準的浮點數
浮點數的默認類型為double類型;
double類型同樣不能表示精確的值,如貨幣(有待理解);
默認值是 0.0d;
例子:double d1 = 123.4。
(7)boolean:
boolean數據類型表示一位的信息
只有兩個取值:true 和 false;
這種類型只作為一種標誌來記錄 true/false 情況;
默認值是 false;
例子:boolean one = true。
(8)char:
char類型是一個單一的 16 位 Unicode 字符
最小值是 \u0000(即為0);
最大值是 \uffff(即為65,535);
char 數據類型可以儲存任何字符;
例子:char letter = ‘A‘;。
可以用包裝類查看內置數據類型的範圍,它們被包裝在java.lang.內置數據類型裏面,最大值:內置數據類型.MAX_VALUE,最小值:內置數據類型.MIN_VALUE,位數:內置數據類型.SIZE
例如:
1 // char 2 System.out.println("基本類型:char 二進制位數:" + Character.SIZE); 3 System.out.println("包裝類:java.lang.Character"); 4 // 以數值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺 5 System.out.println("最小值:Character.MIN_VALUE=" 6 + (int) Character.MIN_VALUE); 7 // 以數值形式而不是字符形式將Character.MAX_VALUE輸出到控制臺 8 System.out.println("最大值:Character.MAX_VALUE=" 9 + (int) Character.MAX_VALUE);
結果:
基本類型:char 二進制位數:16
包裝類:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
2.引用數據類型
- 在Java中,引用類型的變量非常類似於C/C++的指針。引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定為一個特定的類型,比如 Employee、Puppy 等。變量一旦聲明後,類型就不能被改變了。
- 對象、數組都是引用數據類型。
- 所有引用類型的默認值都是null。
- 一個引用變量可以用來引用任何與之兼容的類型。
- 例子:Site site = new Site("Runoob")、int[]、String s1=new String(”punkll”)。
二、運算符
java運算符分成這幾種:
- 算術運算符
- 關系運算符
- 位運算符
- 邏輯運算符
- 賦值運算符
- 其他運算符
1、先說運算符的優先級
優先級 | 運算符 | 簡介 | 結合性 |
---|---|---|---|
1 | [ ] 、 . 、 ( ) |
方法調用,屬性獲取 | 從左向右 |
2 | !、~、 ++、 -- | 一元運算符 | 從右向左 |
3 | * 、/ 、% | 乘、除、取模(余數) | 從左向右 |
4 | + 、 - | 加減法 | 從左向右 |
5 | <<、 >>、 >>> | 左位移、右位移、無符號右移 | 從左向右 |
6 | < 、<= 、>、 >=、 instanceof | 小於、小於等於、大於、大於等於, 對象類型判斷是否屬於同類型 |
從左向右 |
7 | == 、!= | 2個值是否相等,2個值是否不等於。 下面有詳細的解釋 |
從左向右 |
8 | & | 按位與 | 從左向右 |
9 | ^ | 按位異或 | 從左向右 |
10 | | | 按位或 | 從左向右 |
11 | && | 短路與 | 從左向右 |
12 | || | 短路或 | 從左向右 |
13 | ?: | 條件運算符 | 從右向左 |
14 | =、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>= | 混合賦值運算符 | 從右向左 |
2、算術運算符
假設A=10,B=20。
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 - 相加運算符兩側的值 | A + B 等於 30 |
- | 減法 - 左操作數減去右操作數 | A – B 等於 -10 |
* | 乘法 - 相乘操作符兩側的值 | A * B等於200 |
/ | 除法 - 左操作數除以右操作數 | B / A等於2 |
% | 取余 - 左操作數除以右操作數的余數 | B%A等於0 |
++ | 自增: 操作數的值增加1 | B++ 或 ++B 等於 21 |
-- | 自減: 操作數的值減少1 | B-- 或 --B 等於 19 |
++a和a++的區別在於++a是先運算後賦值(或是進行a表達式的運算),而a++是先賦值(或是進行a表達式的運算)後運算,這個和--a、a--一個道理,切記。
3、關系運算符
假設A=10,B=20。
運算符 | 描述 | 例子 |
---|---|---|
== | 檢查如果兩個操作數的值是否相等,如果相等則條件為真。 | (A == B)為假。 |
!= | 檢查如果兩個操作數的值是否相等,如果值不相等則條件為真。 | (A != B) 為真。 |
> | 檢查左操作數的值是否大於右操作數的值,如果是那麽條件為真。 | (A> B)為假。 |
< | 檢查左操作數的值是否小於右操作數的值,如果是那麽條件為真。 | (A <B)為真。 |
>= | 檢查左操作數的值是否大於或等於右操作數的值,如果是那麽條件為真。 | (A> = B)為假。 |
<= | 檢查左操作數的值是否小於或等於右操作數的值,如果是那麽條件為真。 | (A <= B)為真。 |
4、位運算符
Java定義了位運算符,應用於整數類型(int),長整型(long),短整型(short),字符型(char),和字節型(byte)等類型。
位運算符作用在所有的位上,並且按位運算。假設a = 60,b = 13;它們的二進制格式表示將如下:
A = 0011 1100
B = 0000 1101
-----------------
A&b = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
下表列出了位運算符的基本運算,假設整數變量A的值為60和變量B的值為13:
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相對應位都是1,則結果為1,否則為0 | (A&B),得到12,即0000 1100 |
| | 如果相對應位都是0,則結果為0,否則為1 | (A | B)得到61,即 0011 1101 |
^ | 如果相對應位值相同,則結果為0,否則為1 | (A ^ B)得到49,即 0011 0001 |
? | 按位取反運算符翻轉操作數的每一位,即0變成1,1變成0。 | (?A)得到-61,即1100 0011 |
<< | 按位左移運算符。左操作數按位左移右操作數指定的位數。 | A << 2得到240,即 1111 0000 |
>> | 按位右移運算符。左操作數按位右移右操作數指定的位數。 | A >> 2得到15即 1111 |
>>> | 按位右移補零操作符。左操作數的值按右操作數指定的位數右移,移動得到的空位以零填充。 | A>>>2得到15即0000 1111 |
5、邏輯運算符
下表列出了邏輯運算符的基本運算,假設布爾變量A為真,變量B為假。
操作符 | 描述 | 例子 |
---|---|---|
&& | 稱為邏輯與運算符。當且僅當兩個操作數都為真,條件才為真。 | (A && B)為假。 |
| | | 稱為邏輯或操作符。如果任何兩個操作數任何一個為真,條件為真。 | (A | | B)為真。 |
! | 稱為邏輯非運算符。用來反轉操作數的邏輯狀態。如果條件為true,則邏輯非運算符將得到false。 | !(A && B)為真。 |
短路邏輯運算符
當使用與邏輯運算符時,在兩個操作數都為true時,結果才為true,但是當得到第一個操作為false時,其結果就必定是false,這時候就不會再判斷第二個操作了,即使第二個判斷它是ture,第一個判斷為false時,結果就是false。
6、賦值運算符
操作符 | 描述 | 例子 |
---|---|---|
= | 簡單的賦值運算符,將右操作數的值賦給左側操作數 | C = A + B將把A + B得到的值賦給C |
+ = | 加和賦值操作符,它把左操作數和右操作數相加賦值給左操作數 | C + = A等價於C = C + A |
- = | 減和賦值操作符,它把左操作數和右操作數相減賦值給左操作數 | C - = A等價於C = C - A |
* = | 乘和賦值操作符,它把左操作數和右操作數相乘賦值給左操作數 | C * = A等價於C = C * A |
/ = | 除和賦值操作符,它把左操作數和右操作數相除賦值給左操作數 | C / = A等價於C = C / A |
(%)= | 取模和賦值操作符,它把左操作數和右操作數取模後賦值給左操作數 | C%= A等價於C = C%A |
<< = | 左移位賦值運算符 | C << = 2等價於C = C << 2 |
>> = | 右移位賦值運算符 | C >> = 2等價於C = C >> 2 |
&= | 按位與賦值運算符 | C&= 2等價於C = C&2 |
^ = | 按位異或賦值操作符 | C ^ = 2等價於C = C ^ 2 |
| = | 按位或賦值操作符 | C | = 2等價於C = C | 2 |
7、條件運算符(?:)
條件運算符也被稱為三元運算符。該運算符有3個操作數,並且需要判斷布爾表達式的值。該運算符的主要是決定哪個值應該賦值給變量。
variable x = (expression) ? value if true : value if false
變量 x = (表達式) ? 值1 : 值2;
如果表達式為true就輸出值1,表達式為false就輸出值2。
8、instanceof運算符
該運算符用於操作對象實例,檢查該對象是否是一個特定類型(類類型或接口類型)。
instanceof運算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
(對象引用變量) instanceof (類/接口)
如果運算符左側變量所指的對象,是操作符右側類或接口(class/interface)的一個對象,那麽結果為真。
例如:
String name = "James";
boolean result = name instanceof String; // 由於 name 是 String 類型,所以返回真
特別的,如果被比較的對象兼容於右側類型,該運算符仍然返回true。比如繼承了基類的子類。
取材於菜鳥教程和百度百科。
整數
[Zhěngshù]
Integer
java基本數據類型和運算符