java學習day03
10.類型轉換
自動提升,手動下降
10.1自動類型轉換
自動類型轉換
1.兩種類型要兼容 數值與數值類型兼容 char類型也可以存儲數值2.目標類型(等號左邊)取值範圍大於源類型(等號右邊)
提升規則:byte、short、char—–>int ——>long——>float——->double
byte、short、char之間運算提升為int
public class Test1{
public static void main(String [] args ){
//自動類型轉換
//1.目標類型(等號左邊)取值範圍大於源類型(等號右邊)
byte b1 = 20;
short s1 = b1;
System.out,println(s1);
short s2 = 2356;
int i1 = s2;
System.out.println(i1);
int i2 = 12345;
long l1 = i2;
System.out.println(l1);
long l2 = 123456L;
float f1 = l2;
System.out.println(f1);
float f2 = 123.0F;
double d1 = f2;
System.out.println(d1);
}
}
public class Test2{
public static void main(String [] args){
//自動類型轉換中 byte、short、char之間運算,自動提升為int型
byte b2 = 23;
short s2 = 56;
int i3 = b2 + s2;
System.out.prinitln(i3);
char ch1 = '天';
short s3 = 12;
int i4 = ch1 + s3;
System.out.println(i4);
}
}
10.2強制類型轉換
強制類型轉換
1.兩種類型要兼容
2.目標類型(等號左邊)取值範圍小於源類型(等號右邊)整數長度足夠,數據完整。
整數長度不夠,數據截斷。(符號位變化,可能變為負數)
public class Test1{
public static void main(String [] args){
System.out.println("----------------強制類型轉換------------------");
//強制類型轉換
//1.兩種類型要兼容
//2.目標類型(等號左邊)取值範圍小於源類型取值範圍(等號右邊)
System.out.println("================範圍內強制轉換==================");
//範圍內強制轉換不損失
short s11 = 120;
byte b11 = (byte)s11;
System.out.println(b11);
int i11 = 5689;
short s22 = (short)i11;
System.out.println(s22);
long l11 = 567845;
int i22 = (int)l11;
System.out.println(i22);
float f11 = 3.14F;
long l22 = (long)f11;
System.out.println(l22);
double d11 = 20.5;
float f22 = (float)d11;
System.out.println(f22);
int a = 23;
byte b = (byte)a;
System.out.println(b);
System.out.println("=================超範圍強制轉換=================");
//超範圍強制轉換補碼損失
short ss1 = 257;
byte bb1 = (byte)ss1;
System.out.println(bb1);
short ss3 = 128;
byte bb2 = (byte)ss3;
System.out.println(bb2);
short ss4 = 129;
byte bb3 = (byte)ss4;
System.out.println(bb3);
char ch1 = 'A';
System.out.println(ch1 + 1); // 66 B
System.out.println(ch1 -1);
}
}
11.運算符
11.1算術運算符
++或者– 如果單獨作為一條語句書寫 在前在後沒有區別
++或者– 如果不是單獨一條語句
如果++或者–在前 先執行++或者– 再執行其他的
如果++或者–在後 先執行其他的 再執行++或者–
public class Test1{
public static void main(String [] args){
System.out.println("-----------算術運算符 -----------------");
System.out.println("----------- + - * / %---------------");
//兩個操作數 算術運算符+ - * / %
int a = 10;
int b = 20;
int c = 30;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b); // 不能保存小數
System.out.println(a % c);
System.out.println("----------- ++(自增) --(自減)---------------");
//一元算術運算符++(自增) --(自減)
// ++或者-- 如果單獨作為一條語句書寫 在前在後沒有區別
int a1 = 10 ;
a1++;
System.out.println(a);
int c1 = 10;
++c1;
System.out.println(c1);
int b1 = 15;
b1--; // b = b - 1;
System.out.println(b1);
int d1 = 15;
--d1;
System.out.println(d1);
// ++或者-- 如果不是單獨一條語句
// 如果++或者--在前 先執行++或者-- 再執行其他的
// 如果++或者--在後 先執行其他的 再執行++或者--
int e = 10;
int f = e++;
System.out.println(f);
System.out.println(e);
int k = 10;
int m = ++k;
System.out.println(m);
System.out.println(k);
int h = 15;
int j = h--;
System.out.println(j);
System.out.println(h);
}
}
11.2賦值運算符
public class Test1{
public static void main(String [] args){
System.out.println("================賦值運算符================");
// 賦值運算符
int a = 10; // 將等號右邊賦值給等號左邊
a += 10; // a = a + 10;
System.out.println(a);
a -= 5; // a = a - 5;
System.out.println(a);
a *= 6; // a = a * 6;
System.out.println(a);
a /= 3; // a = a / 3;
System.out.println(a);
a %= 2; // a = a % 2;
System.out.println(a);
System.out.println("---------- a +=10; 與 a = a + 10;的區別----------------");
short s1 = 10;
s1 += 10; //類型不會提升
int s2 = s1 + 10; //自動類型提升
System.out.println("short型:\t" + s1);
System.out.println("int型:\t" + s2);
byte b1 = 10;
b1 += 10; //類型不會提升
int i2 = b1 + 20; //自動類型提升
System.out.println("byte型:\t" + b1);
System.out.println("int型:\t" + i2);
}
}
11.3關係運算符
關係運算符 最終結果都為布爾類型
public class RelationOpreator{
public static void main(String [] args){
System.out.println("================關係運算符================");
//關係運算符 最終結果都為boolean類型
int a = 40;
int b = 50;
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <=b );
System.out.println(a == b);
System.out.println(a != b);
}
}
11.4邏輯運算符
//邏輯運算符
&& 短路與 同真為真(其他為假)第一個假短路
& 邏輯與 同真為真(其他為假)
|| 短路或 同假為假(其他為真)第一個為真短路
| 邏輯或 同假為假(其他為真)
public class Test1{
public static void main(String [] args){
//邏輯運算符
// && 短路與 要求兩個或多個表達式都成立 則結果為真
// 短路與 有短路的效果 如果第一個條件不成立 則後續的條件不再執行
// & 邏輯與 要求兩個或多個表達式都成立 則結果為真 沒有短路效果
// || 短路或 要求兩個或者多個表達式有一個成立 則結果為真
// 短路或 有短路的效果 如果第一個條件已經成立 則後續的條件不再執行
// | 邏輯或 要求兩個或者多個表達式有一個成立 則結果為真 沒有短路效果
int a = 15;
int b = 20;
int c = 22;
System.out.println("--------短路與---------");
System.out.println(a < b && b < c); //true
System.out.println(a > b && b < c);//false
System.out.println("--------邏輯與---------");
System.out.println(a < b & b < c);//true
System.out.println(a > b & b < c);//false
System.out.println("=======================");
System.out.println("--------短路或---------");
int d = 22;
int e = 33;
int f = 44;
System.out.println(d > e || e < f); //true
System.out.println(d > e || e > f); //false
System.out.println("--------邏輯或---------");
System.out.println(d > e | e < f); //true
System.out.println(d > e | e > f); //false
int x = 6;
int y = 7;
int z = 7;
System.out.println((y-- == x) && (--y != x));//false
System.out.println(y); //6
System.out.println((z-- == x) & (--z != x));//false
System.out.println(z); //4
int j = 10;
int k = 11;
int l = 10;
System.out.println((++j == k) || (++j == k));//true
System.out.println(j); //11
System.out.println((++l == k) | (++l == k));//true
System.out.println(l); //12
}
}
public class Test2{
public static void main(String [] args){
// ! 非
boolean bl1 = !true;
boolean bl2 = !false;
System.out.println(bl1);
System.out.println(bl2);
System.out.println(!true);
System.out.println(!false);
// 三目(三元)運算符 布爾表達式 ? 結果1 : 結果2
System.out.println(20 == 20 ? "條件成立" : "條件不成立");
int age = 19;
System.out.println(age >= 18 ? "成年了" : "未成年");
int a = 20;
int b = a >= 20 ? 55 : 66;
System.out.println(b);
}
}
11.5
public class Test1{
public static void main(String [] args){
// 位運算符
// 左移:在有效的範圍以內,左移幾位表示乘以2 的幾次方
System.out.println(1 << 1);
System.out.println(1 << 2);
System.out.println(1 << 3);
System.out.println(1 << 4);
System.out.println(1 << 5);
System.out.println(1 << 32);
System.out.println("------------------------------------------");
// 右移:在有效的範圍內 右移幾位 表示除以2的幾次方
System.out.println(8 >> 2);
System.out.println(8 >> 10);
System.out.println(-1 >> 100);
System.out.println(-20 >> 2); // -5
// >>> 無符號右移
System.out.println(-20 >>> 2);
System.out.println(20 >>> 3);
// & 與 二進位相同位 都為1 結果為1 其他都為0
System.out.println(10 & 30);
// | 或 二進位相同位 有一個為1 或者兩個都為1 結果為1 其他為0
System.out.println(10 | 30);
// ^ 異或 二進位相同位 相同為0 不同為1
System.out.println(10 ^ 30);
// ~ 取反 每一位 0改為1 1改為0
System.out.println(~30);
// 整數的四種表示形式
// 二進位 0B binary
int i1 = 0B11;
System.out.println(i1);
int i2 = 20;
// 八進位 以0開頭
int i3 = 012;
System.out.println(i3);
// 十六進位 0X開頭
int i4 = 0XA3DF;
System.out.println(i4);
}
}
12.變數的命名規範
字下美人數駱駝
字:字母
下:下劃線
美:美元符號$
人:人民幣符號¥
數:數字
駱駝:駝峰命名 studentNameAndAge
可以以字母、下劃線、美元符號、人民幣符號開頭,可以包含數字,不能以數字開頭,見名知義,有意義