1. 程式人生 > >java基礎梳理三:基本資料型別轉換、運算子

java基礎梳理三:基本資料型別轉換、運算子

1、基本資料型別轉換

byte i = 2;
int j = 3;
byte result = i + j;×
①賦值號右側兩個int型別的變數相加,得到的還是一個int型別的結果,把int型別的結果賦值給byte型別的變數,產生精度丟失,提示出錯

②賦值號右側int型別的變數和byte型別的變數相加,得到的是int型別的結果(型別提升),把int型別的結果賦值給byte型別的變數,產生精度丟失,提示出錯

// 解決進度丟失問題的方法:
①將結果的資料型別改為大的資料型別
②使用強制型別轉換:此時是有可能發生精度丟失的
// 強制型別轉換的形式:(要轉換為的資料型別)(被轉換的資料內容)
int result = i + j;

byte result = (byte) (i + j);//不進行強制轉換會出錯,編譯時就會出錯


// 在浮點數後新增F 和 對浮點數強制型別轉換為float型別,效果相同
float n = 987.65f;

float j = (float)987.65;

byte result1 = (i + j);報錯

byte result3 = 2 + 3;

變數相加,先看型別有沒有問題

常量相加,先看結果是否在被賦值的變數的資料類型範圍內


// char型別和整型存在可轉換的關係

①把字元'c'和int型別的1做加法,再賦值給char型別的變數j,j的型別為char,所以輸出的還是字元

②字元和int型別的數做加法,得到的結果是int型別;System.out.println('c' + 1); // 100

③字元和字元做加法,得到的結果是int型別

// 布林型別不參與運算


2、運算子

對常量或是變數進行操作的符號

①算術運算子:+ - * / % ++ --

int型別的變數和int型別的變數做除法時,得到的結果是int型別

double result = 0.0;

result = i / j;//3.0

System.out.println(i * 1.0 / j);//3.5;型別提升

System.out.println(i % j); // 1

System.out.println((i*1.0) % j); // 1.0

// 加號 + 
1、作為算術運算子的加號
2、作為正數的符號+

3、作為字串的連線符號  System.out.println("北京" + 2008);


②++自增運算子 --直減運算子

i、單獨使用自增運算子++:++不論放在變數前,還是變數後,都會讓變數的值自增1

ii、參與運算時

int j = i++; // j = 2, i = 3:這句語句上來先把i的值賦值給j,然後i自己做自增

int j = ++i; // j = 3, i = 3:這句語句上來先i自己做自增,然後把i的值(自增後的值)賦值給j

②賦值運算子: = += -= *= /= %=
Java中的一個等號 = 表示的是將等號(賦值號)右側的內容賦值給等號(賦值號)左側的變數,習慣改稱為 賦值號

以+=為例,表示的是將左側的變數的值和右側的內容按=前面的運算子進行相應的操作,操作後的結果再賦值給左側的變數

//對於非預設資料型別的資料,使用賦值運算子時,會自動做一下強制型別轉換

byte z = 5;

z += 3;

// z = (byte) (z + 3); // 上式等價


③比較運算子: == != > >= < <=

比較的結果必然是一個boolean值

格外注意:Java中使用 == 表示相等


④ 邏輯運算子: & | ^ ! && ||

參與運算的變數或是表示式的值都為boolean型別

& : 邏輯與 有一個是false得到的結果就是false
| : 邏輯或 有一個是true得到的結果就是true
! : 邏輯非 顛倒黑白

^ : 邏輯異或 吸鐵石


&& : 邏輯與(聰明與/短路與)如果第一個是false,得到的結果就是false,且其他的就不執行了
|| : 邏輯或(聰明或/短路或)如果第一個是true,得到的結果就是true,且其他的就不執行了

int i = 2;
int j = 3;
System.out.println((++i == 2) && (j++ == 3)); // 因為第一個表示式的結果為false,所以第二個表示式不會執行了
System.out.println(i); // 3

System.out.println(j); // 3


⑤位運算子 & | ^ ~ >> >>> <<(學習日期:20150716【7】)
 規則:(在二進位制中)
& : 進行操作的兩個數的同一位上,有一個是0,結果就為0
System.out.println(2 & 3);//2
| : 進行操作的兩個數的同一位上,有一個是1,結果就為1
System.out.println(2 | 3);//3
^ : 進行操作的兩個數的同一位上,相同的是0,不同的是1
System.out.println(2 ^ 3);//1
~ : 進行操作的數按位取反(操作的是補碼)
System.out.println(~2);//-3


位異或的其他用法:一個數和另一個數做兩次異或後,得到的是它本身的值
可以使用在簡單的加密解密中
System.out.println(2 ^ 3 ^ 3); // 2


<< : 左移,左邊的高位刪除,右邊的低位補0
>> : 右移,因為左側的最高位是符號位,所以要區分是0還是1;左側的最高位是0,左側補0;左側的最高位是1,左側補1

>>> : 無符號右移,不論左側最高位是是0還是1;左側補0

System.out.println(2 << 1);//4
System.out.println(2 >> 1);//1
System.out.println(-2 >> 1);//-1

System.out.println(-2 >>> 1);//2147483647