資料型別轉換
Java程式中要求參與計算的資料,必須要保證資料型別一致,如果資料型別不一致將發生型別的轉換,
1.1 自動轉換
一個 int 型別變數和一個 byte 型別變數進行加法運算,運算結果,變數的型別將是 int 型別
public static void main(String[] args) {
int i = 1;
byte b = 2;
// byte x = b + i; // 報錯
//int型別和byte型別運算,結果是int型別
int j = b + i;
System.out.println(j);
}
byte 型別記憶體占有1個位元組,在和 int 型別運算時會提升為 int 型別 ,自動補充3個位元組,因此計算后的結果還是 int 型別,
同樣道理,當一個 int 型別變數和一個 double 變數運算時, int 型別將會自動提升為 double 型別進行運算,
public static void main(String[] args) {
int i = 1;
double d = 2.5;
//int型別和double型別運算,結果是double型別
//int型別會提升為double型別
double e = d+i;
System.out.println(e);
}
轉換規則
范圍小的型別向范圍大的型別提升, byte、short、char 運算時直接提升為 int ,
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
1.2 強制轉換
強制轉換格式:
資料型別 變數名 = (資料型別)被轉資料值;
當一個 short 型別與 int 型別相加,我們知道會型別提升,但是還想給結果賦值給 short 型別變數,
就需要強制轉換,
public static void main(String[] args) {
//short型別變數,記憶體中2個位元組
short s = 1;
int i = 1;
/*
出現編譯失敗
s和i做運算的時候,i是int型別,s會被提升為int型別
s+i后的結果是int型別,將結果在賦值會short型別時發生錯誤
short記憶體2個位元組,int型別4個位元組
必須將int強制轉成short才能完成賦值
*/
s = s + i;//編譯失敗
s = (short)(s+1);//編譯成功
}
注意
浮點轉成整數,直接取消小數點,可能造成資料損失精度,
int 強制轉成 short 砍掉2個位元組,可能造成資料丟失,
1.3 ASCII編碼表
public static void main(String[] args) {
//字符型別變數
char c = 'a';
int i = 1;
//字符型別和int型別計算
System.out.println(c+i);//輸出結果是98
}
在char型別和int型別計算的程序中,char型別的字符先查詢編碼表,得到97,再和1求和,結果為98,char型別提升為了int型別,char型別記憶體2個位元組,int型別記憶體4個位元組,

運算子
運算子: 對變數進行操作的符號
運算子的分類: 算數運算子 , 賦值運算子 , 比較運算子 , 邏輯運算子 , 三元運算子
2.1 算數運算子
算數運算子包括:
+ 加法運算,字串連接運算
- 減法運算
*乘法運算
/ 除法運算
% 取模運算,兩個數字相除取余數
++ 、 - - 自增自減運算
public class Demo{
public static void main(String[] args) {
// 定義變數
int a = 5;
int b = 3;
System.out.println(a + b); // 8
System.out.println(a ‐ b); // 2
System.out.println(a * b); // 15
System.out.println(a / b); // 1.66666?
System.out.println(a % b); // 2
System.out.println("‐‐‐‐‐‐‐‐‐");
// 整數相除,結果是整數,要得到小數,必須有小數參與運算
System.out.println(5.0 / 3); // 1.6666666666666667
System.out.println(5 / 3.0); // 1.6666666666666667
}
}
%取余面試題:
System.out.println(5 % 3); // 2
System.out.println(‐5 % 3); // -2
System.out.println(5 % ‐3); // 2
System.out.println(‐5 % ‐3); // -2
注意:取余結果符號與左邊符號相同
++ 運算,變數自己增長1,反之, - - 運算,變數自己減少1,用法與 ++ 一致,
獨立運算:
變數在獨立運算時, 前++ 和 后++ 沒有區別 ,
變數 前++ :例如 ++i ,
變數 后++ :例如 i++ ,
混合運算:
和其他變數放在一起, 前++ 和 后++ 就產生了不同,
變數 前++ :變數a自己加1,將加1后的結果賦值給b,也就是說a先計算,a和b的結果都是2,
public static void main(String[] args) {
int a = 1;
int b = ++a; // 先++,后=賦值
System.out.println(a);//計算結果是2
System.out.println(b);//計算結果是2
}
變數 后++ :變數a先把自己的值1,賦值給變數b,此時變數b的值就是1,變數a自己再加1,a的
結果是2,b的結果是1,
public static void main(String[] args) {
int a = 1;
int b = a++; // 先=賦值,后++
System.out.println(a);//計算結果是2
System.out.println(b);//計算結果是1
}
自增自減面試題
// 面試題:
int a = 10;
int b = 10;
int c = 10;
a = b++;
// a = 10, b = 11
c = ‐‐a;
// a = 9, c = 9
b = ++a;
// a = 10, b = 10
a = c‐‐;
// a = 9, c = 8
// 請分別計算出a,b,c的值
+ 符號在字串中的操作:
+ 符號在遇到字串的時候,表示連接、拼接的含義,
“a”+"b"的結果是“ab”,連接含義
public static void main(String[] args) {
// + 遇到字串表示連接
System.out.println("abc" + "def");
System.out.println("abc" + 5);
System.out.println("abc" + 5 + 5); // 1. "abc" + 5 = "abc5"; 2. "abc5" + 5 = "abc55"
System.out.println("abc" + (5 + 5)); // 1. 5 + 5 = 10; 2. "abc" + 10 = "abc10"
System.out.println(5 + 5 + "abc"); // 1. 5 + 5 = 10; 2. 10 + "abc" = "10abc"
}
面試題:
System.out.println("5+5="+5+5);//輸出5+5=55
2.2 賦值運算子
賦值運算子包括:
= 賦值
+= 加后賦值
-= 減后賦值
*= 乘后賦值
/= 除后賦值
%= 取模后賦值
賦值運算子,就是將符號右邊的值,賦給左邊的變數,
public static void main(String[] args) {
// 定義變數
int i = 3; // 將3賦值給變數i
i = i + 2; // 將變數i和2相加,再賦值給變數i
System.out.println(i);
// +=: 賦值運算子, 將=左邊的變數和=右邊的值進行操作,再賦值給變數
int j = 10;
j += 5; // j = j + 5
System.out.println(j);
int m = 10;
m ‐= 5; // m = m ‐ 5;
System.out.println(m);
System.out.println("‐‐‐‐‐‐‐‐‐‐");
byte b = 1;
// b = b + 2; // 錯誤: 不兼容的型別: 從int轉換到byte可能會有損失
// b += 2; // 可以
b = (byte)(b + 2);
System.out.println(b);
}
2.3 比較運算子
比較運算子又叫關系運算子,是兩個資料之間進行比較的運算,運算結果都是布林值 true 或者 false ,
比較運算子包括:
== 比較符號兩邊資料是否相等,相等結果是true,
< 比較符號左邊的資料是否小于右邊的資料,如果小于結果是true,
> 比較符號左邊的資料是否大于右邊的資料,如果大于結果是true,
<= 比較符號左邊的資料是否小于或者等于右邊的資料,如果小于或等于結果是true,
>= 比較符號左邊的資料是否大于或者等于右邊的資料,如果小于或等于結果是true,
!= 不等于符號 ,如果符號兩邊的資料不相等,結果是true,
public static void main(String[] args) {
System.out.println(3==3); // true
System.out.println(3==4); // false
System.out.println(3!=4); // true
System.out.println(3>4); // false
System.out.println(3<4); // true
System.out.println(5<=4); // false
System.out.println(4>=4); // true
// 注意
int i = 3;
int j = 4;
System.out.println(i=j); // 將j賦值給i,輸出i
System.out.println(i==j); // true
}
2.4 邏輯運算子
邏輯運算子,是用來對兩個布爾型別進行運算的,運算結果都是布林值 true 或者 false
邏輯運算子包括
2.5 三元運算子
三元運算子格式:
資料型別 變數名 = 布爾型別運算式?結果1:結果2;
三元運算子計算方式:
布爾型別運算式結果是true,三元運算子整體結果為結果1,賦值給變數,
布爾型別運算式結果是false,三元運算子整體結果為結果2,賦值給變數,
public static void main(String[] args) {
int a = 30;
int b = 20;
int c = a > b ? 100 : 20;
System.out.println(c);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/136610.html
標籤:Java
