3.資料之間的轉換、運算符、表達式
3.1.Java中基本資料類型之間的轉換以及注意事項?
1.boolean類型是不參與基本資料類型主鍵的轉換。
2.基本資料類型的精度排序【由低到高順序】
byte short char int long float double
3.将資料類型精度低的轉換成資料類型精度高的----隐式資料類型轉換【自動資料類型轉換】
隐式資料類型轉換【自動資料類型轉換】不需要修改程式,直接指派即可完成。
可以直接賦予具體的資料值,也可以将變量指派。
例如:int—>doubole [隐式資料類型轉換【自動資料類型轉換】]
public class DataTypeSwitch1{
public static void main(String args[]){
//int--->doubole [隐式資料類型轉換【自動資料類型轉換】]
//直接賦予具體的資料值
double doublevalue = 100;
System.out.println("doublevalue=="+doublevalue);
//可以将變量指派
int intnum=300;
double doublevalue2=intnum;
System.out.println("doublevalue2=="+doublevalue2);
}
}
3.1.2.将資料類型精度高的轉換成資料類型精度低的–顯式資料類型轉換【強制資料類型轉換】
顯式資料類型轉換【強制資料類型轉換】需要修改程式。
格式:低精度資料類型 變量名稱 = (精度低資料類型)精度高的資料值【變量】;
例如:double—>int[強制資料類型轉換【需要修改程式】]
public class DataTypeSwitch2{
public static void main(String args[]){
//double--->int[顯式資料類型轉換【強制資料類型轉換】]
//格式:低精度資料類型 變量名稱 = (精度低資料類型)精度高的資料值【變量】;
//将小數轉換成整數不會“四舍五入”,而是直接舍棄小數部分
int intnum1=(int)12.8;
System.out.println("intnum1=="+intnum1);
double doublevalue=12.8d;
int value=(int)doublevalue;
System.out.println("value="+value);
}
}
3.1.3.char與int的轉換
char的取值範圍就是整數
1.char---->int [[隐式資料類型轉換【自動資料類型轉換】]]
2.int---->char[[顯式資料類型轉換【強制資料類型轉換】]]
例如:
public class CharAndInt{
public static void main(String args[]){
//char的取值範圍就是整數
//1.char---->int [[隐式資料類型轉換【自動資料類型轉換】]]
char chatvalue1='好';
int intvalue1=chatvalue1; //隐式資料類型轉換
System.out.println("intvalue1="+intvalue1);//intvalue1=22909
//2.int---->char[[顯式資料類型轉換【強制資料類型轉換】]]
int intvalue2=22909;
char charvalue2=(char)intvalue2;//顯式資料類型轉換
System.out.println("charvalue2="+charvalue2);
}
}
3.1.4.int轉換成byte
當整數超過取值範圍以後,會從最小值向前推進計算。

public class IntToByte{
public static void main(String args[]){
byte bytevalue=(byte)300;
System.out.println("bytevalue="+bytevalue);
//byte bytevalue1=127;
//byte bytevalue2=(byte)(bytevalue1+1);
//System.out.println("bytevalue2="+bytevalue2);
}
}
3.2運算符
3.2.1指派運算符與指派表達式的說明和用法
指派運算符:”=”
例如:int num = 100;
3.2.2算術運算符與算術表達式的說明和用法
算術運算符:+ - * / %【求餘】 ++【自動加1】 --【自動減1】
例如:
public class SuanShu{
public static void main(String args[]){
//+ - * / %
int num1=10;
int num2=3;
System.out.println(num1+"+"+num2+"="+(num1+num2));
System.out.println(num1+"-"+num2+"="+(num1-num2));
System.out.println(num1+"*"+num2+"="+(num1*num2));
//當參數算術運算的資料是整數時,運算結果就是整數
System.out.println(num1+"/"+num2+"="+(num1/num2));
System.out.println(num1+"%"+num2+"="+(num1%num2));
}
}
四則混合運算,參數運算的資料類型不是同一類時,它的運算結果的資料類型是精度最高的資料類型
byte b=100;
short s=200;
int i=300;
long l=400L;
float f=3.14f;
double d=2.7;
char c='A';
//-1545.5599853515625----double
System.out.println(b+s-i*l/c+f);
}
}
3.3.3”++”與”–”的具體用法
“++”— 自動加1
- 1.變量++;–【先用後加】
- 2.++變量;–【先加後用】
“- -”---- 自動減1
- 3.變量–;【先用後減】
- 4.–變量;【先減後用】
例如:
public class SuanShu3{
public static void main(String args[]){
//“++”--- 自動加1
//1.變量++;--【先用後加】
int num1=10;
System.out.println("變量++=="+(num1++));//10 先用
System.out.println("num1=="+num1);//num1=10+1 後加
//2.++變量;--【先加後用】
int num2=10;
System.out.println("++變量=="+(++num2));//num2=10+1先加
System.out.println("num1=="+num2);//後用
//“--”---- 自動減1
//3.變量--;【先用後減】
int num3=10;
System.out.println("變量--=="+(num3--));//num2=10先用
System.out.println("num3=="+num3);//num2=10-1=9後減
//4.--變量;【先減後用】
int num4=10;
System.out.println("--變量=="+(--num4));//num2=10-1=9先減
System.out.println("num4=="+num4);//num2=9後用
}
}
3.3.4.關系運算符與關系表達式的說明和用法
關系運算符: > < >= <= == !=
public class GuanXi{
public static void main(String args[]){
//關系運算符: > < >= <= == !=
//關系運算符的結果一定是boolean值
int num1=10;
int num2=3;
System.out.println(num1+" > "+num2+"="+(num1>num2));
System.out.println(num1+" < "+num2+"="+(num1<num2));
System.out.println(num1+" >= "+num2+"="+(num1>=num2));
System.out.println(num1+" <= "+num2+"="+(num1<=num2));
System.out.println(num1+" == "+num2+"="+(num1==num2));
System.out.println(num1+" != "+num2+"="+(num1!=num2));
}
}
3.3.5.邏輯運算符與邏輯表達式的說明和用法
邏輯運算符被分成2大類:
1.邏輯運算符 【邏輯或 || 邏輯與 && 邏輯反 !】
例如:
public class LuoJi1{
public static void main(String args[]){
//1.邏輯運算符 【邏輯或 || 邏輯與 && 邏輯反 !】
//邏輯運算符的運算值和運算結果一定是boolean
int num1=10;
int num2=3;
//邏輯或 ||
boolean b1 =((num1+num2)>10) || ((num1-num2)<3) ;
System.out.println("b1=="+b1);
//邏輯與 &&
boolean b2 =((num1+num2)>10) && ((num1-num2)<3) ;
System.out.println("b2=="+b2);
//邏輯反 !
boolean b3 =!(((num1+num2)>10) && ((num1-num2)<3)) ;
System.out.println("b3=="+b3);
}
}
3.3.5.1短路與和短路或
短路或–邏輯或的運算規則
【運算符号左右兩邊都是false的時候,運算結果就一定是false,如果出現一個true,運算結果就一定是true】
短路或—短路就是運算符号隻運算一邊
當運算符号左邊的結果為true時候,右邊不用計算,結果就一定是true.
短路與–邏輯與的運算規則
【運算符号左右兩邊都是true的時候,運算結果就一定是true,如果出現一個false,運算結果就一定是false】
短路與—短路就是運算符号隻運算一邊
當運算符号左邊的結果為false時候,右邊不用計算,結果就一定是false
例如:
public class LuoJi2{
public static void main(String args[]){
//短路或:當運算符号左邊的結果為true時候,右邊不用計算,結果就一定是true.
int num1=10;
//System.out.println(num1/0);
boolean b1= (num1 < 20) || ((num1/0)>10);
System.out.println("b1="+b1);
//短路與:當運算符号左邊的結果為false時候,右邊不用計算,結果就一定是false
int num2=100;
boolean b2= (num2 < 20) && ((num2/0)>10);
System.out.println("b2="+b2);
}
}
2.位運算符
位運算:就是将參與運算的資料轉換成2進制【0101001】
10進制與2進制的轉換 : 8421碼
-
原碼
原碼就是符号位加上真值的絕對值, 即用第一位表示符号, 其餘位表示值.
-
反碼
反碼的表示方法是:
正數的反碼是其本身【原碼】
負數的反碼是在其原碼的基礎上, 符号位不變,其餘各個位取反.
-
補碼
補碼的表示方法是:
正數的補碼就是其本身【原碼】
負數的補碼是在其原碼的基礎上, 符号位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
整數的2進制就是源碼
負數的2進制實質上補碼表示。
-3 – 10000011—11111100—11111101----【負數的原碼取反+1】{符号位不變}
-3–3—00000011–11111100—11111101 —【負數的絕對值的原碼的取反+1】
-7–7--00000111—11111000----11111001
-12–12–00001100—11110011—11110100
常見的6種位運算符号
1.& 按位與 相同1為1,不同為0。
例如:3 & -7
0000 0011 3
1111 1001 -7
0000 0001 1
2.| 按位或 相同位隻要一個為1即為1。
例如:3 | -7
0000 0011 3
1111 1001 -7
1111 1011 -5
3.^ 按位異或 相同位不同則為1,相同則為0。
例如:3 | -7
0000 0011 3
1111 1001 -7
1111 1010 -6
4.~取反 0和1全部取反
例如:~3
0000 0011 3
1111 1100 — 1111 1011 – 1000 0100 -4
5.<<左移位 2進制整體向左移動指定的位數
例如 : 3 << 2
0000 0011 3
0000 0110 移動1位
0000 1100 移動2位 — 12
6.>>右移 2進制整體向右移動指定的位數
例如 : 3 >> 2
0000 0011 3
0000 0001 移動1位
0000 0000 移動2位 — 0
public class LuoJi3{
public static void main(String args[]){
//1.& 按位與 相同為1,不同為0。
int num1=3;
int num2=-7;
System.out.println(num1 & num2); // 1
//2.| 按位或 相同位隻要一個為1即為1。
System.out.println(num1 | num2); // -5
//3.^ 按位異或 相同位不同則為1,相同則為0。
System.out.println(num1 ^ num2); // -6
//4.~取反 0和1全部取反
System.out.println(~num1); // -4
//5.<<左移位 2進制整體向左移動指定的位數
System.out.println(num1 << 2); //
//6.>>右移位 2進制整體向右移動指定的位數
System.out.println(num1 >> 2); // 0
System.out.println(2 << 3);
}
}
當我們學習完運算符以後,變量和運算符會組成一個運算的表達式,這個運算表達式中的變量的資料類型可能不同,那麼這個運算表達式的結果使用什麼類型的變量來儲存?
這個運算表達式的結果使用參與運算的變量中資料類型精度最高的為标準。
public class Test{
public static void main(String args[]){
byte by1=120;
short sh1=220;
int int1=1000;
long long1=10000L;
float flo1=12.5f;
double dou1=12.5;
char ch1='A';
float val=by1+sh1+int1+long1+flo1+ch1;
System.out.println("val=="+val);
}
}
運算符号的優先級